我在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方法。
正如您所看到的,CreatedByUsername
和id
被隐藏用于普通视图和编辑。
当我添加新数据时,我发现ModelState.IsValid = false.
我设法做到这一点,以便CreatedByUsername
没有向ModelState
添加错误,即使在通过editrules:{ required:false }
插入时没有为其添加数据。
问题是同一条代码对id
不起作用,并且正在向ModelState
添加错误“需要id字段。”
有人可以告诉我如何防止id
字段发生这种情况吗?
答案 0 :(得分:0)
问题是您的id字段具有key属性,除了验证规则之外,还需要此字段。解决方法是为验证定义自定义函数,始终返回true
答案 1 :(得分:0)
您可以将viewmodel中的id字段设置为可空吗?像这样:
public int? Id {get;组; }
如果id不可为空,mvc将自动创建验证错误。如果您没有使用viewmodel,只是在保存操作上使用参数,则可以将id参数设置为nullable。