ASP.NET MVC Keep ModelState在失败的属性绑定上有效

时间:2014-09-05 17:25:55

标签: c# ajax asp.net-mvc asp.net-mvc-4 jqgrid

我想知道ASP.NET MVC中是否有任何内置方式可以包含绑定中包含的模型属性,但如果绑定失败,则不会使模型失效。假设我有以下支持JqGrid CRUD操作的简化模型:

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 个答案:

答案 0 :(得分: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;
}