【新特性速递】一个不可能完成的任务(ActiveWindow.GetHidePostBackReference可以指定回发参数了)!

FineUIMvc/Core的下个版本(v6.3.0),我们为 ActiveWindow.GetHidePostBackReference 增加了回发参数,这样可以方便的向父页面的窗体关闭事件传递参数了。

 

注:FineUIPro本来就支持GetHidePostBackReference带回发参数,所以这次更新只是对 MVC/Core 而言。

 

为了演示这个特性,我们将新增两个示例,位于:内联框架/表格与编辑窗体(提示对话框),(提示对话框,自定义脚本)。

其中,表格与编辑窗体(提示对话框,自定义脚本)示例我们之前曾经有过详细的描述:

 

在这个示例中,我们通过如下代码注册带参数的脚本调用:

1
2
3
4
5
6
7
8
9
10
11
12
public IActionResult OnPostBtnUpdateParentGrid_Click()
{
    // 1. 这里放置保存窗体中数据的逻辑
 
    // 2. 先弹出提示对话框,再回发父窗体
    // 2. 如果无需传递参数,可以将 GetHideExecuteScriptReference 改为 GetHidePostBackReference 即可!
    string scripts = String.Format("doCustomPostBack('{0}');", "参数 - " + DateTime.Now.Millisecond);
    Alert.ShowInTop("保存成功!", String.Empty, MessageBoxIcon.Success, ActiveWindow.GetHideExecuteScriptReference(scripts));
 
 
    return UIHelper.Result();
}

  

其中的 doCustomPostBack 是定义在父页面的一个JS函数:

1
2
3
4
5
6
7
8
9
10
function doCustomPostBack(closeArgument) {
    var grid1 = F.ui.Grid1;
 
    // 触发后台事件
    F.doPostBack('@Url.Handler("MyCustomPostBack")', {
        closeArgument: closeArgument,
        gridSourceKey: grid1.getAttr('data-source-key'),
        gridFields: grid1.fields
    });
}

 

这种实现需要自定义JS脚本(doCustomPostBack),并自定义回发(F.doPostBack)。而这么做的目的仅仅是为了向后台传递一个参数(closeArgument),这的确有点麻烦。

 

 

FineUIMvc/Core的下个版本(v6.3.0),我们为 ActiveWindow.GetHidePostBackReference 增加了回发参数,可以方便的解决这个问题,先来看下示例效果:

 

对比下此时的关闭弹出窗体代码,要简单的多了:

1
2
3
4
5
6
7
8
9
10
public IActionResult OnPostBtnUpdateParentGrid_Click()
{
    // 1. 这里放置保存窗体中数据的逻辑
 
    // 2. 先弹出提示对话框,再回发父窗体
    Alert.ShowInTop("保存成功!", String.Empty, MessageBoxIcon.Success, ActiveWindow.GetHidePostBackReference("参数 - " + DateTime.Now.Millisecond));
 
 
    return UIHelper.Result();
}

  

窗体的关闭事件也不需要自定义脚本了,直接用标签定义即可:

1
2
3
4
5
6
<f:Window ID="Window1" Title="弹出窗体" Hidden="true" EnableIFrame="true" EnableMaximize="true" Target="Top"
    EnableResize="true" IsModal="true" Width="800" Height="550" CloseAction="HidePostBack"
    OnClose="@Url.Handler("Window1_Close")"
    OnCloseFields="Grid1"
    OnCloseParameter1="@(new Parameter("gridSourceKey", "F.ui.Grid1.getAttr('data-source-key')"))">
</f:Window>

  

后台的OnClose事件处理函数可以直接接受一个名为 closeArgument 的参数,如下所示:

1
2
3
4
5
6
7
public IActionResult OnPostWindow1_Close(string gridSourceKey, string[] Grid1_fields, string closeArgument)
{
    // 重新绑定表格数据(模拟)
    AutoBindGrid(gridSourceKey, Grid1_fields, closeArgument);
 
    return UIHelper.Result();
}

  

特别注意:这里的 closeArgument 命名是固定好的,不能更改。

 

这个 closeArgument  也正是 FineUIMvc/Core 施展魔法的地方,因为在 ASP.NET Mvc/Core 中实现回发前的拦截是不容易的。我们之前曾专门写过一篇文章介绍:

 

 

注:FineUICore v6.3.0 计划在 2020年5月中旬 发布,敬请期待!

 

posted @   三生石上(FineUI控件)  阅读(794)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2012-04-08 ExtAspNet v3.1.3
点击右上角即可分享
微信分享提示