【发布时间】:2018-03-26 07:35:00
【问题描述】:
我需要在表格单元格中使用表格,在另一个单元格中使用字段。我正在使用输入form attribute。 MVC 将数据传递给控制器工作正常,但表单发送之前的验证不适用于此属性。
<tr>
<td>
@Html.EditorFor(model => item.Code, new { htmlAttributes = new { @class = "form-control inline-edit", form = "editForm" + item.Id } })
@Html.ValidationMessageFor(model => item.Code)
</td>
<td>
@Html.EditorFor(model => item.Name, new { htmlAttributes = new { @class = "form-control inline-edit", form = "editForm" + item.Id } })
@Html.ValidationMessageFor(model => item.Name)
</td>
<td class="text-right">
@using (Html.BeginForm("UpdatePrintMaterial", "Production", FormMethod.Post, new { id = "editForm" + item.Id }))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(model => item.Id)
<button class="btn btn-default save" data-toggle="tooltip" title="Zapisz"><i class="fa fa-save"></i></button>
}
</td></tr>
如何解决此问题以在发送数据之前使用验证?
【问题讨论】:
-
简短回答是否定的。 MVC 的客户端验证(使用
jquery.validate.unobtrusive.js和jquery.validate.js仅适用于<form>元素内的表单控件。最好使用布局元素(定位、浮动等)来模拟表格,而不是<table>元素。 -
但是,拥有多个表单(每行一个)是没有意义的 - 您一次只能提交一个表单。如果您希望能够对多行进行编辑,则使用单个表单并使用
for循环或EditorTemplate正确生成视图 - 目前您的代码甚至无法正常工作,因为您的名称属性与您的模型不匹配) - 参考this answer。 -
或者,在每一行中都有一个编辑链接,并显示一个用于编辑行的对话框。
标签: asp.net-mvc forms validation razor attributes