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
});

コントローラーに2つのメソッドがあります

メソッドを取得

[HttpGet]
public ActionResult EditAuthor(int authorId)

投稿方法

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

行を選択して編集ボタンをクリックすると、get メソッドが起動されるはずですが、post メソッドが起動されます。get メソッドを起動するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

1

HTTPの新しい値を設定するとwindow.location、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いくつかの行が選択されているかどうか( nullでないかどうか)の追加の検証を追加で含めることをお勧めします。

さらに私はあなたをお勧めします

  • グリッドでalways オプションを使用するgridview: trueと、グリッドのパフォーマンスが向上します。
  • pager: jQuery('#gridpager')オプションをに置き換えますpager: '#gridpager'
  • jsonReaderオプションの現在の値をに置き換えますjsonReader: {repeatitems: false, id: "sno"}。指定したオプションはデフォルト値と組み合わされます(ドキュメントを参照)。jsonReaderさらに、同じプロパティを2回指定したため、optionの現在の値に構文エラーが含まれていますrepeatitems: false
于 2012-12-16T14:20:04.203 に答える