我正在使用带有Razor的MVC3 我在_Layout.cshtml中包含了以下内容:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
我的表单如下:
@{
ViewBag.Title = "Register";
Html.EnableClientValidation();
}
@using (Html.BeginForm("Register"))
{
<fieldset>
<p>
@Html.LabelFor(o => o.Email)
@Html.TextBoxFor(o => o.Email)
@Html.ValidationMessageFor(o => o.Email)
</p>
...
</fieldset>
}
我的ViewModel具有DataAnnotations(并实现IValidatableObject),并在控制器操作期间进行验证。但是,如果不发布表单,我似乎无法在客户端使用JS验证。
我错过了什么?
答案 0 :(得分:29)
在ASP.NET MVC 3中,jquery验证插件是执行客户端验证的默认设置。因此,您可以从项目中删除所有Microsoft*.js
脚本。您只需要以下内容:
<script src="@Url.Content("~/Scripts/jquery-1.4.4.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
并删除Html.EnableClientValidation();
电话。在web.config中启用了客户端验证:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
答案 1 :(得分:1)
删除Html.EnableClientValidation();并转到您的网络配置,并确保您有一个如下所示的appSetting:
<add key="ClientValidationEnabled" value="true"/>
答案 2 :(得分:1)
尝试在视图中添加以下行。
HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
包括jquery-1.4.4.js,jquery.validate.js,jquery.validate.unobtrusive.js
我让它为我的应用程序工作但似乎没有开始,直到我输入一个坏的值。例如
[Required(ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRequired")]
[Range(1, Int32.MaxValue, ErrorMessageResourceType = typeof(Resources.WValidation), ErrorMessageResourceName = "TestCountRange")]
public int? TestCountThreshold { get; set; }
然后我在前端输入0,之后客户端验证工作完美无瑕。我想验证是否适用于初始空白文本框...验证似乎不正确,等待尝试的错误值。