如何向DirectEvents传递参数?如何将列ID值传递到控制器Action?
嘿,我来帮你搞定这两个Ext.NET相关的问题,结合你给出的GridPanel代码片段,给你具体的实现方案:
问题1:如何向DirectEvents传递参数?
在Ext.NET中,给DirectEvents传递参数最常用的方式是通过ExtraParams配置项,你既可以手动指定固定参数,也可以通过JS函数动态获取当前组件或行的数据。针对GridPanel这类带行数据的场景,还能直接利用行上下文提取所需值。
举个通用的简单示例,比如给按钮的DirectClick事件传参:
Html.X().Button() .Text("点击传参") .DirectEvents(de => { de.Click.Url = "/Home/MyAction"; // 传递固定参数 de.Click.ExtraParams.Add(new Parameter { Name = "fixedParam", Value = "固定值", Mode = ParameterMode.Value }); // 动态获取其他组件的值 de.Click.ExtraParams.Add(new Parameter { Name = "dynamicParam", Value = "#{TextField1}.getValue()", Mode = ParameterMode.Raw }); })
问题2:如何将GridPanel中DataIndex为"ID"的列的值传递到控制器的Action中?
针对你代码里的GridPanel和Edit命令按钮,我们可以在GridCommand的DirectClick事件中,通过行记录上下文获取当前行的ID值,再传递给后端Action。下面是补全后的完整代码示例:
@(Html.X().GridPanel() .Title("ComponentColumn Pin Editor") .Width(700) .Height(300) .Store(Html.X().Store() .Model(Html.X().Model() .Fields( new ModelField("ID", ModelFieldType.Int) ) ) .DataSource(Model) ) .ColumnModel( Html.X().ComponentColumn() .Editor(true) .OverOnly(true) .Pin(true) .DataIndex("ID") .Flex(1) .Text("ID") .Component(Html.X().NumberField()), Html.X().GridCommand() .CommandName("Edit") .Icon(Icon.NoteEdit) .Text("编辑") .DirectEvents(de => { de.Click.Url = "/YourController/EditRow"; // 传递当前行的ID值 de.Click.ExtraParams.Add(new Parameter { Name = "rowId", // 利用Grid行上下文获取ID字段值 Value = "record.get('ID')", Mode = ParameterMode.Raw }); // 可选:传递整行数据(需序列化) de.Click.ExtraParams.Add(new Parameter { Name = "rowData", Value = "record.data", Mode = ParameterMode.Raw, Encode = true // 自动序列化为JSON字符串 }); }) ) )
对应的后端控制器Action可以这样接收参数:
public ActionResult EditRow(int rowId, string rowData) { // 根据rowId处理业务逻辑,比如查询数据 // 如果传了rowData,可反序列化为实体: // var rowModel = JsonConvert.DeserializeObject<YourEntityModel>(rowData); return this.Direct(); }
另外还有一种更简洁的方式:利用GridDirectEventArgs直接获取行数据。只需要修改GridCommand的DirectEvents配置:
// GridCommand的DirectEvents部分修改 de.Click.Url = "/YourController/EditRow"; de.Click.EventArgs = "gridEventArgs";
然后后端Action直接接收GridDirectEventArgs类型的参数:
public ActionResult EditRow(GridDirectEventArgs e) { // 直接获取当前行的ID int rowId = int.Parse(e.Row.Record["ID"].ToString()); // 处理你的业务逻辑 return this.Direct(); }
这样两种方式都能轻松把Grid行的ID传递到控制器中~
内容的提问来源于stack exchange,提问作者triest23
相关产品推荐
相关产品推荐

