0

我有以下内容:

     function setupGrid(labId) {

       var url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;
       alert(url);

       $("#loginList").jqGrid({
         url: url,
         datatype: "json",
         colNames: ['PNum', 'Client', 'Salesperson', 'Email', ....
       .....
       .....  

我也有以下代码:

    <script type="text/javascript">
      $(document).ready(function () {
       var labId;

       $("#LabId").change(function () {   // point1
        labId = $("#LabId").val();
        setupGrid(labId); // this goes to setupGrid but DOES NOT go to the given url( url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;)         
       });

       // point 2
       setupGrid(labId);  // this goes to setupGrid  and DOES go to the given url(url = '@Url.Action("GetProgData", "Prog")' + '?lId=' + lId;)
       ......

当程序第一次运行时,它会转到 point2,然后转到 setupGrid 函数并转到以下 url 值:

    url: url

当我从 .change (point1) 调用它时,它再次转到 SetupGrid 并且警报显示正确的值,但不明白为什么当我在 url 处放置断点时它没有转到 url。为什么它第一次起作用但是当我从 .change 执行它时它不会转到 url。

4

1 回答 1

0

我看到 jqGrid 的工作方式存在共同的理解问题。

如果你使用$("#loginList").jqGrid({...});你需要有空<table>元素id="loginList"。jqGrid 将<table>元素转换为相对复杂的 div、表格等结构。所以 jqGrid 首先初始化网格。它构建网格的外部

然后 jqGrid 使 Ajax 调用url(在使用datatype: "json"或的情况下datatype: "xml")并填充网格。一个可以$("#loginList").trigger("reloadGrid")用来刷新网格体。

我希望现在应该清楚一个人只能调用$("#loginList").jqGrid({...});一次。如果您确实尝试从现有网格再次创建网格, l 将被忽略。

您应该做的只是将代码重写为以下内容

$(document).ready(function () {
    var labId;

    $("#loginList").jqGrid({
        url: '@Url.Action("GetProgData", "Prog")',
        postData: {
            lId: function () {
                return $("#LabId").val();
            }
        },
        datatype: "json",
        colNames: ['PNum', 'Client', 'Salesperson', 'Email', ....
    });

    $("#LabId").change(function () {   // point1
        $("#loginList").trigger("reloadGrid");
    });
});

您可以在此处阅读更多关于postData. 在另一个答案中,如果需要将值从一种形式的所有控件发送到控制器操作,您将找到可行的替代方法。

于 2013-01-15T08:59:50.217 回答