2014-09-05 53 views
0

我想知道是否有任何内置的方式在ASP.NET MVC中有一个模型属性包含在绑定,但不会使模型无效if绑定失败。说我有支持的jqGrid CRUD操作以下简化模型:ASP.NET MVC保持ModelState在失败的属性绑定上有效

public class JqGridCRUDDTO 
{ 
    public JqGridCRUDOperation oper {get; set;} 
    public int? id {get;set;} 
} 

当模型表示“添加”操作(由oper属性指定),的jqGrid帖所包含的HTML元素的id属性为id(我相信就是这样)。在这种情况下,绑定id属性失败,使ModelState无效。但id财产的绑定应该只会失败,当我不需要它(我只需要一个记录ID“编辑”和“删除”操作)。我知道,理想情况下,我应该为每个操作都有一个单独的模型,但JqGrid似乎更适合将所有CRUD操作发送到单个URL,因此我不确定单独的模型方法是否会导致到最简单的解决方案。修改我的客户端脚本也是如此,以便JqGrid在添加时发送一个整数值 - 我知道这是可能的,但这会增加客户端脚本的复杂性。我宁愿在服务器端尽可能多地管理复杂性。

如果没有建立我要求的内容,我想听听其他人会怎么做。

回答

1

我不确定我是否完全理解您的问题。如果您不希望那个jqGrid在添加操作的情况下发送id="_empty",您可以修改serializeEditData之内或onclickSubmit之内的值。

第一种方式(onclickSubmit):

onclickSubmit: function (options, postdata) { 
    if (postdata[this.id + "_id"] === "_empty") { 
     return {id: null}; 
    } 
} 

替代方式(serializeEditData)不保存任何id在所有加入操作的情况下:

serializeEditData: function (postdata) { 
    var data = $.extend({}, postdata); // make copy of postdata object 
    if (data.id === "_empty") { 
     delete data.id; 
    } 
    return data; 
} 
+0

是啊,我看到其他问题和答案,表明我应该在添加时获得“_empty”,但我实际上获得了“jqg1”。 – grin0048 2014-09-05 18:30:16

+0

@ grin0048:可能你使用'inlineNav'进行内联编辑,或者直接调用'addRow'方法(或者你可能用''formatter:“actions”)。在这种情况下,你可以指定'addRow'的'rowID'参数作为一个返回'null'的函数,或者你可以使用'serializeRowData'回调函数来移除'id'值,该值的值是以“jqg”开始的('$ .jgrid.uidPref ')。无论如何,如果您遇到实现问题,您应该在Javascript代码中附加问题的文本,其中显示了如何使用行编辑和添加操作。 – Oleg 2014-09-05 19:02:23

+0

我能够删除serializeRowData中的'Id'参数。谢谢。 – grin0048 2014-09-05 20:24:55

相关问题