0

jqGrid

$(document).ready(function () {

    $("#grid").jqGrid({
        url: '@Url.Action("GetAllAuthors", "Admin")',
        datatype: "json",
        mtype: 'get',
        colNames: ['Yazar Adı', 'Öz Geçmiş'],
        colModel: [
                  { name: 'Name', index: 'Name', editable: false },
                  { name: 'Description', index: 'Description', editable: false }
        ],
        jsonReader: {
            repeatitems: false,
            id: "sno",
            root: "rows", //array containing actual data
            page: "page", //current page
            total: "total", //total pages for the query
            records: "records", //total number of records
            repeatitems: false
        },
        rowNum: 10,
        rowList: [10, 20, 30, 40, 50],
        pager: jQuery('#gridpager'),
        sortname: 'Name',
        viewrecords: true,
        sortorder: "asc",
        width: 710,
        height: 300
    })
    .navGrid('#gridpager', { edit: false, add: false, del: false, search: false, refresh: false })
    .navButtonAdd('#gridpager', {
        caption: "Düzenle",
        buttonicon: "ui-icon-pencil",
        onClickButton: function () {
            var grid = $("#grid");
            var rowid = grid.jqGrid('getGridParam', 'selrow');
            //alert(rowid + " - " + grid.jqGrid('getCell', rowid, 'CustomerName') + " - Link: " + $("#customers_grid_table a.customer_details").attr("href"));
            window.location = '@Url.Action("EditAuthor", "Admin")?authorId=' + rowid;
            //LoadAction('@Url.Action("EditAuthor", "Admin")?authorId=' + rowid);
        }
    });  //end jqgrid
});

我的控制器中有两种方法

获取方法

[HttpGet]
public ActionResult EditAuthor(int authorId)

发布方法

[HttpPost]
public ActionResult EditAuthor(AuthorViewModel model, HttpPostedFileBase file)

我选择了一行并单击了编辑按钮,我希望触发 get 方法,但触发了 post 方法。我该怎么做才能触发 get 方法?

谢谢。

4

1 回答 1

1

如果您设置新值,window.location则将使用 HTTP GET。要生成 HTTP POST,您可以使用$.ajax或提交一些表单。例如,您可以动态构建不可见<form>并提交它。例如

onClickButton: function () {
    var rowid = $(this).jqGrid("getGridParam", "selrow"),
        myForm = document.createElement("form"),
        param1 = document.createElement("input");

    myForm.action = '@Url.Action("EditAuthor", "Admin")';
    myForm.method = "POST";
    myForm.style.display="none";

    param1.name = "authorId";
    param1.type = "text";
    param1.value = rowid;
    myForm.appendChild(param1);

    document.body.appendChild(myForm);
    myForm.submit();
    document.body.removeChild(myForm);
}

我建议您另外包括是否选择了某些行(是否rowid不为空)的附加验证。

此外,我推荐你

  • 在网格中使用always gridview: true选项,这只会提高网格的性能。
  • 将选项替换pager: jQuery('#gridpager')pager: '#gridpager'.
  • jsonReader将option的当前值替换为jsonReader: {repeatitems: false, id: "sno"}. 您指定的选项将与默认值结合使用(请参阅文档。此外,您当前的jsonReaderoption 值包含语法错误,因为您repeatitems: false两次指定了相同的属性。
于 2012-12-16T14:20:04.203 回答