zoukankan      html  css  js  c++  java
  • 【新特性速递】一个不可能完成的任务(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月中旬 发布,敬请期待!

  • 相关阅读:
    sublimetext3安装配置
    .Net Core 商城微服务项目系列(八):购物车
    .Net Core 商城微服务项目系列(七):使用消息队列(RabbitMQ)实现服务异步通信
    eShopOnContainers学习系列(三):RabbitMQ消息总线实践
    Docker系列(五):.Net Core实现k8s健康探测机制
    Docker系列(四):容器之间的网络通信
    Docker系列(三):将.Net Core Api部署到Kubernetes (K8s)中
    Docker系列(二):通过Docker安装使用 Kubernetes (K8s)
    生产环境项目问题记录系列(一):一次循环数据库拖垮服务器问题
    .Net Core 商城微服务项目系列(六):搭建自己的Nuget包服务器
  • 原文地址:https://www.cnblogs.com/sanshi/p/12655379.html
Copyright © 2011-2022 走看看