jqgrid MVC省略了ModelState中的一些列

时间:2011-08-26 01:27:16

标签: asp.net-mvc jqgrid

我在MVC设置中有一个jqGrid:

<script type="text/javascript">

    jQuery(document).ready(function () {
        jQuery("#list").jqGrid({
            url: '/Home/DynamicGridData/',
            datatype: 'json',
            mtype: 'POST',
            colNames: ['id', 'note', 'tax', 'PaymentType', 'CreatedByUsername', 'Actions'],
            colModel: [
                  { name: 'id', index: 'id', hidden: true, key: true, editable: true, editrules:{ required:false } },
                  { name: 'note', index: 'note', width: 40,align:'center', editable: true, editrules: { required : true } },
                  { name: 'tax', index: 'tax', width: 400, align: 'center', editable: true, editrules: { required : true } },
                  { name: 'PaymentTypeId', index: 'PaymentTypeId', width: 400, align: 'center', editable: true, edittype:"select", 
                    editoptions: { dataUrl: '/Home/PaymentTypes/' }},
                  { name: 'CreatedByUsername', index: 'CreatedByUsername', hidden: true, editable: true, editrules:{ required:false } },
                  { name: 'act',index:'act',width:55,align:'center',sortable:false,formatter:'actions',
                     formatoptions:{
                         keys: true, // we want use [Enter] key to save the row and [Esc] to cancel editing.
                         beforeSubmit:function(postdata, formid) {
                         alert("Hi");
                             jQuery("#ValidationSummary").show('slow');
                         },

                         },}
              ],
            pager: jQuery('#pager'),
            rowNum: 10,
            rowList: [5, 10, 20, 50],
            sortname: 'Id',
            sortorder: "desc",
            viewrecords: true,
            imgpath: '',
            caption: 'My first grid',
            editurl: '/Home/Save/'
        });
        jQuery("#list").navGrid('#pager', { edit: false, search: false, add: true });

    }); 
</script>

在提交时创建它会转到控制器上的save方法。

正如您所看到的,CreatedByUsernameid被隐藏用于普通视图和编辑。

当我添加新数据时,我发现ModelState.IsValid = false.

我设法做到这一点,以便CreatedByUsername没有向ModelState添加错误,即使在通过editrules:{ required:false }插入时没有为其添加数据。

问题是同一条代码对id不起作用,并且正在向ModelState添加错误“需要id字段。”

有人可以告诉我如何防止id字段发生这种情况吗?

2 个答案:

答案 0 :(得分:0)

问题是您的id字段具有key属性,除了验证规则之外,还需要此字段。解决方法是为验证定义自定义函数,始终返回true

答案 1 :(得分:0)

您可以将viewmodel中的id字段设置为可空吗?像这样:

public int? Id {get;组; }

如果id不可为空,mvc将自动创建验证错误。如果您没有使用viewmodel,只是在保存操作上使用参数,则可以将id参数设置为nullable。