ASP.NET MVC对失败的属性绑定保持ModelState有效

本文关键字:绑定 ModelState 有效 属性 NET MVC 失败 ASP | 更新日期: 2023-09-27 18:20:44

我想知道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属性的绑定应该只有在我不需要它的时候才会失败(我只需要一个用于"编辑"answers"删除"操作的记录id)。

我意识到,理想情况下,我应该为每个操作都有一个单独的模型,但JqGrid似乎更自然地适合将所有CRUD操作发送到一个URL,所以我不确定单独的模型方法会带来最简单的解决方案。修改我的客户端脚本也是如此,这样JqGrid在添加时会发送一个整数值——我知道这是可能的,但这会增加客户端脚本的复杂性。我更愿意在服务器端管理尽可能多的复杂性。

如果没有现成的方法来实现我的要求,我想听听其他人会如何处理。

ASP.NET MVC对失败的属性绑定保持ModelState有效

我不确定我是否完全理解你的问题。如果你不想让jqGrid在Add操作中发送id="_empty",你可以修改serializeEditDataonclickSubmit内部的值。

第一种方式(onclickSubmit):

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

可选方式(serializeEditData)在Add操作的情况下根本不保存任何id

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