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

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

 

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

 

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

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

 

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

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函数:

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 增加了回发参数,可以方便的解决这个问题,先来看下示例效果:

 

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

public IActionResult OnPostBtnUpdateParentGrid_Click()
{
	// 1. 这里放置保存窗体中数据的逻辑

	// 2. 先弹出提示对话框,再回发父窗体
	Alert.ShowInTop("保存成功!", String.Empty, MessageBoxIcon.Success, ActiveWindow.GetHidePostBackReference("参数 - " + DateTime.Now.Millisecond));


	return UIHelper.Result();
}

  

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

<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 的参数,如下所示:

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 @ 2020-04-08 10:43  三生石上(FineUI控件)  阅读(...)  评论(...编辑  收藏