【问题标题】:Data to Controller from jqGrid in MVC3?从MVC3中的jqGrid到控制器的数据?
【发布时间】:2012-03-07 11:29:57
【问题描述】:

如你所见,我对这些东西很陌生。

我已经建立了一个 jqGrid,负载很好。我正在尝试启用内联编辑,但我不确定如何设置。我的接收方法被调用了,但是我没有得到任何数据。

网格设置:

    $(function () {
    var lastsel;
    $("#list").jqGrid({
        url: '@Url.Action("ExampleData", "Home")',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['Namn', 'Adress', 'Stad'],
        colModel: [
          { name: 'Name', index: 'Name', width: 130, editable: true },
          { name: 'Address', index: 'Address', width: 180, editable: true },
          { name: 'City', index: 'City', width: 80, editabel: true },
        ],
        pager: '#pager',
        rowNum: 10,
        rowList: [10, 20, 30],
        sortname: 'Name',
        sortorder: 'desc',
        viewrecords: true,
        gridview: true,
        width: 700,
        onSelectRow: function (id) {
            if (id && id !== lastsel) {
                jQuery('#list').jqGrid('restoreRow', lastsel);
                jQuery('#list').jqGrid('editRow', id, true);
                lastsel = id;
            }
        },
        editurl: '@Url.Action("Incoming", "Home")',
        caption: 'Kontaktpersoner'
    });

    jQuery("#list").jqGrid('navGrid',"#prowed3",{edit:false,add:false,del:false});

以及控制器中的代码,它被调用。我想这是应该用于取回数据的editurl......

    public ActionResult Incoming(Object stuff)
    {
        return null;
    }

我不应该把 json 传回服务器吗,就像我在加载时发送给它的东西一样?

【问题讨论】:

    标签: jquery asp.net-mvc jqgrid


    【解决方案1】:

    控制器操作Incoming 不需要返回任何数据返回到 jqGrid,因为您仅将它用于编辑而不是添加新数据。重要的是,如果发生错误,操作会返回与错误对应的 HTTP 状态代码。如果 jqGrid 可以恢复之前的结果。

    在某些情况下,您也应该从服务器返回数据以防编辑成功。例如,我通常使用在数据库的每个表中创建不可为空的rowversion(之前的timestamp)列来管理乐观并发。该列的值将在表中的 INSERT 时自动创建,并在数据项的 UPDATE 时自动更新。因此,我用一个额外的隐藏列填充 jqGrid,该隐藏列是从数据库中与其他数据一起获得的。在行编辑时,rowversion 的旧值将用于验证数据是否从其他地方更改。无论如何,在任何行编辑之后都需要将rowversion 的新版本发送到 jqGrid。可以使用aftersavefunc 读取服务器响应并更新保存在jqGrid 中的rowversion 的值。

    上述解释只是可能实现的粗略模式。您的主要问题的答案是:您不需要从 Incoming 操作中返回任何内容。如果您确实需要向 jqGrid 发送一些信息,您可以使用editRowaftersavefunc 参数来获取服务器响应并进行处理。

    【讨论】:

    • 感谢您提供非常有价值的回答!然而,问题是如何从浏览器 in 获取内容到控制器(我有我的 Stuff 参数)。后来我发现,如果我添加与网格中同名的参数,它们会自动进入我的控制器方法。我以为我会收到json!
    • 您肯定有一个具有NameAddressCity 的类,可能还有一些其他属性,例如id。如果您使用MyClass stuff 而不是Object stuff,则stuff 的属性将被填充。如果您没有id 属性,您可以将public ActionResult Incoming(Object stuff) 更改为public ActionResult Incoming(string id, MyClass stuff)。是你需要的吗?
    • 非常感谢!这正是我的意思,现在我可以在我的 ViewModel 中获取数据,而不是单独的字符串!
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    相关资源
    最近更新 更多