Lib.Web.Mvc中设置JqGridSubGridModel的subGridModel params无效求助
解决Lib.Web.Mvc中JqGridSubGridModel无法传递额外参数的问题
我之前也碰到过一模一样的问题,你直接修改subGridModel的params之所以没生效,是因为jqGrid在初始化主网格时,就已经把subGridModel的参数绑定到了子网格的请求逻辑里,后续修改subGridModel对象并不会触发内部逻辑的更新。下面给你两种可行的解决方案:
方案一:服务器端初始化时直接配置参数(适用于参数在服务端可获取的场景)
如果你的额外参数是在服务器端就能拿到的(比如当前用户ID、全局配置值),可以直接在初始化JqGridHelper时就设置subGridModel的Params:
var grid = new JqGridHelper<YourMainGridModel>("yourGridId", url: Url.Action("LoadMainGridData"), subGridUrl: Url.Action("LoadSubGridData"), subGridModel: new JqGridSubGridModel { // 这里直接添加额外参数,支持多个 Params = new List<string> { "YourAdditionalParamName" } });
这样生成的子网格请求会自动带上你指定的参数,和rowId一起传递到subGridUrl对应的接口。
方案二:客户端通过subGridRowExpanded事件动态传递行级参数(适用于参数来自主网格当前行的场景)
如果你的额外参数是主网格某一行的属性(比如主行的某个ID或字段值),就需要在客户端处理。利用jqGrid的subGridRowExpanded事件,在每次展开子网格时,动态给子网格添加请求参数:
第一步:在服务器端初始化时绑定事件
var grid = new JqGridHelper<YourMainGridModel>("yourGridId", url: Url.Action("LoadMainGridData"), subGridUrl: Url.Action("LoadSubGridData"), // 绑定子网格展开时的处理函数 subGridRowExpanded: "function(subgridId, rowId) { configureSubGrid(subgridId, rowId); }");
第二步:编写客户端JavaScript处理函数
function configureSubGrid(subgridId, rowId) { // 获取主网格当前行的完整数据 var mainRowData = $("#yourGridId").jqGrid("getRowData", rowId); // 获取刚创建的子网格实例 var subGrid = $("#" + subgridId); // 给子网格设置额外请求参数,这里用主行的某个属性值 subGrid.jqGrid("setGridParam", { postData: { // 替换成你需要传递的主网格属性名 AdditionalValue: mainRowData.MainGridPropertyName } }).trigger("reloadGrid"); }
这个方法的核心是在子网格展开的瞬间,直接修改子网格的postData,确保每次请求都能带上当前主行的专属参数,比修改subGridModel更可靠,因为它直接作用于子网格的请求配置。
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

