我正在使用带有数据注释和jQuery验证插件的ASP .NET MVC 3。
有没有办法标记某个字段(或某些数据注释)仅应在服务器端进行验证?
我有一个带有屏蔽插件的电话号码字段,而正则表达式验证器在用户端发疯了。regex只是一种故障保护(以防万一有人决定破解javascript验证),因此我不需要它在客户端运行。但是我仍然希望其他验证可以在客户端运行。
我不确定此解决方案是否适用于MVC3。它肯定适用于MVC4:
您可以在呈现字段之前先在Razor视图中禁用客户端验证,然后在呈现字段后重新启用客户端验证。
例:
<div class="editor-field"> @{ Html.EnableClientValidation(false); } @Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" }) @{ Html.EnableClientValidation(true); } </div>
在这里,我们禁用BatchId字段的客户端验证。
我也为此开发了一个小帮手:
public static class YnnovaHtmlHelper { public static ClientSideValidationDisabler BeginDisableClientSideValidation(this HtmlHelper html) { return new ClientSideValidationDisabler(html); } } public class ClientSideValidationDisabler : IDisposable { private HtmlHelper _html; public ClientSideValidationDisabler(HtmlHelper html) { _html = html; _html.EnableClientValidation(false); } public void Dispose() { _html.EnableClientValidation(true); _html = null; } }
您将按以下方式使用它:
<div class="editor-field"> @using (Html.BeginDisableClientSideValidation()) { @Html.TextBoxFor(m => m.BatchId, new { @class = "k-textbox" }) } </div>
如果有人有更好的解决方案,请告诉我!
希望能有所帮助。