You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:14:24