Kendo行内网格Post请求传递隐藏字段:代码无效求解决方法
解决Kendo行内网格POST请求传递隐藏字段的问题
我之前也踩过这个坑——Kendo Grid里用columns.Bound(p => p.UserID).Hidden()确实经常没法把字段带到POST请求里,尤其是行内编辑的场景。这是因为这个方法只是隐藏了列的显示,但并没有把字段加入到编辑提交的表单数据中。这里有几个亲测有效的方案:
方案1:使用客户端模板渲染隐藏输入框
直接在列的配置里用ClientTemplate生成一个隐藏的input,这样提交时表单会自动带上这个字段:
columns.Bound(p => p.UserID) .ClientTemplate("<input type='hidden' name='UserID' value='#= UserID #' />") .Hidden(); // 可选,确保列不在网格中显示
这个方法简单直接,适合大多数场景,不管是新增还是编辑行,都会正确传递UserID的值。
方案2:利用Grid的Edit事件手动添加隐藏字段
如果需要动态处理字段值(比如编辑时要更新UserID),可以在Grid的edit事件里往编辑容器中插入隐藏输入:
$("#yourGridId").kendoGrid({ // 其他网格配置(列、数据源等) edit: function(e) { // 创建隐藏输入并追加到编辑表单 const hiddenInput = $("<input>").attr({ type: "hidden", name: "UserID", value: e.model.UserID }); e.container.append(hiddenInput); } });
这个方法的灵活性更高,能根据编辑时的模型状态调整字段值。
方案3:在数据源Transport中手动附加参数
如果是通过数据源的create/update方法提交,可以直接在data回调里添加要传递的隐藏字段:
dataSource: { transport: { create: { url: "/YourController/Create", type: "POST", data: function() { // 获取当前行的UserID并返回 const grid = $("#yourGridId").data("kendoGrid"); return { UserID: grid.dataItem(grid.select()).UserID }; } }, update: { url: "/YourController/Update", type: "POST", data: function() { // 同理处理更新场景 const grid = $("#yourGridId").data("kendoGrid"); return { UserID: grid.dataItem(grid.select()).UserID }; } } } }
这个方法适合需要统一处理提交参数的场景,不过如果是批量编辑的话,需要调整逻辑来获取每一行的字段值。
内容的提问来源于stack exchange,提问作者Darshan Unadkat
相关产品推荐
相关产品推荐

