编辑
2024-05-16
我当开发
00

目录

2. OnPageHandlerExecuting(页面处理开始前)
3. OnPageHandlerExecuted(页面处理结束后)

formsfilter2.png 继续上一个稿子,FineUI11.0-CoreWebForms笔记(二)

2. OnPageHandlerExecuting(页面处理开始前)

这里的实现MethodInfo methodInfo = A(context, handlerInstance); 是这么写的

MethodInfo result = null; StringValues stringValues = P_0.HttpContext.Request.Query["handler"]; if (!string.IsNullOrEmpty(stringValues)) { result = P_1.GetType().GetMethod(stringValues, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); }

注意

handler的方法 btnChangeEnable_Click不能有重载!否则报错;

如果要避开默认的handler的方法,只要找不到这个methodInfo就行了,后台改个名就找不到了;

下面自已写一个Filter试试

namespace FineUICore { public class MyWebFormsFilter : IPageFilter, IFilterMetadata { public void OnPageHandlerExecuting(PageHandlerExecutingContext context) { object handlerInstance = context.HandlerInstance; bool flag = context.HttpContext.Request.Method == "POST"; HandlerMethodDescriptor handlerMethod = context.HandlerMethod; if (flag && PageContext.IsFineUIAjaxPostBack() && PageManager.Instance.EnableWebForms) { string id = context.HttpContext.Request.Form["__EVENTTARGET"].ToString(); string handler = context.HttpContext.Request.Query["handler"]; if (!string.IsNullOrEmpty(handler) && !string.IsNullOrEmpty(id)) { Console.WriteLine($"按钮{id} 触发了方法{handler}"); } } } } }

3. OnPageHandlerExecuted(页面处理结束后)

由于事件的方法都是 void,具体的响应在 WebFormsFilterOnPageHandlerExecuted, 将Result定义为了FineUICore.UIHelper.Result(); 用以继续管道;

当操作属性后,将状态保存到了ControlBase.FState

public virtual bool Enabled { get { object obj = FState["Enabled"]; if (obj != null) { return (bool)obj; } return true; } set { FState["Enabled"] = value; } }

后面生成响应的js,读取FState中属性变化的值,应该是WebFormsFilter干的事,触发了ControlBase.OnAjaxPreRender方法(可能是),有兴趣的可以细抠;

OnPageHandlerExecuted方法如下

public void OnPageHandlerExecuted(PageHandlerExecutedContext context) { object handlerInstance = context.HandlerInstance; bool flag = context.HttpContext.Request.Method == "POST"; HandlerMethodDescriptor handlerMethod = context.HandlerMethod; if (flag && PageContext.IsFineUIAjaxPostBack() && PageManager.Instance.EnableWebForms) { D.C().E(); if (handlerMethod == null && context.Result is PageResult) { context.Result = UIHelper.Result(); } } }


336ed2bd17b80a3cfeab2f7e0219227.jpg

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:没想好

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!