繁体   English   中英

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

[英]ASP.NET MVC Keep ModelState Valid on Failed Property Binding

我想知道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来执行“ edit”和“ delete”操作),绑定才会失败。

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

如果没有内置的方法可以执行我要的操作,那么我想听听其他人如何做到这一点。

我不确定我是否完全理解您的问题。 如果您不希望jqGrid在添加操作的情况下发送id="_empty" ,则只需修改serializeEditData内部或onclickSubmit内部的值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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM