我有以下内容:
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。
答案 0 :(得分:0)
我看到jqGrid如何运作有共同的理解问题。
如果您使用$("#loginList").jqGrid({...});
,则需要使用<table>
空id="loginList"
元素。 jqGrid将<table>
元素转换为相对复杂的div,表等结构。因此jqGrid 首先初始化网格。它构建了网格的外部。
然后jqGrid对url
进行Ajax调用(如果使用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");
});
});
您可以阅读here有关postData
属性中方法用法的更多信息。在another answer中,如果需要将一个表单的所有控件中的值发送到控制器操作,您将找到可行的替代方法。