在一个页面上进行多个表单的ASP.NET MVC客户端验证

4
我在我的asp.net mvc视图中有4个表单。我已经在每个表单上启用了客户端验证,方法是在每个表单的Html.BeginForm()之前放置<% Html.EnableClientValidation(); %>。问题是,尽管我为表单指定了ID,但无论我点击其他表单的提交按钮时,页面上的第一个表单都会被验证。
这种用法是否支持?还是我做错了什么?
3个回答

1

这可能会有所帮助

                <%=Html.ValidationMessageFor(m => ((RegistrationFormModel)m.Data).Email, null, new { id = "registration_Email" })%>

你只需为该字段指定自定义ID,而不是生成的ID即可。这样做没问题。 - imlarry
谢谢,当我在部分中同时使用相同表单添加新数据和编辑现有数据时,这让我摆脱了困境。只需添加一个简单的检查以查看主键是否为0(即新数据),并为这些数据添加自定义ID。 - Jamie M

0

确保您为属性设置了验证消息。除非您有一个验证消息或(ValidateFor()),否则该属性不会被添加到在表单提交时验证的元素集中。

请参阅此问题以获取更多信息。


我正在使用Html.ValidationMessageFor。 - ntombela
客户端验证可以在一个表单中工作,但是一旦我添加更多的表单,每次我在其他表单上点击提交时,页面上的第一个表单将被验证。 - ntombela
嗯,看起来它只生成了一组验证元数据。你可能需要使用一些备用的客户端验证。 - tvanfosson

0

MVC2完全支持您正在寻找的设置,我猜想您正在将其应用于在同一页上显示注册表单和登录表单之类的内容?

如果是这样,您只需要使每个表单具有独立的属性名称,例如:

LoginModel将具有一个Username属性,而RegistrationModel将具有一个RegistrationUsername属性。

这不是一个很好的例子,但可能发生的情况是,验证会跨表单触发,因为您的属性具有相同的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接