MVC3/Razor客户端验证没有触发
问题描述:
我正在尝试使用数据注释获取在MVC3中工作的客户端验证。我看过类似的帖子,包括这个MVC3 Client side validation not working的答案。MVC3/Razor客户端验证没有触发
我正在使用EF数据模型。我为我的验证创建了这样的部分类。
[MetadataType(typeof(Post_Validation))]
public partial class Post
{
}
public class Post_Validation
{
[Required(ErrorMessage = "Title is required")]
[StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")]
public string Title { get; set; }
[Required(ErrorMessage = "Text is required")]
[DataType(DataType.MultilineText)]
public string Text { get; set; }
[Required(ErrorMessage = "Publish Date is required")]
[DataType(DataType.DateTime)]
public DateTime PublishDate { get; set; }
}
我的cshtml页面包含以下内容。
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Post</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Text)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
}
Web配置:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
布局:
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
所以,多行文字注释的作品,并创建一个文本区域。但验证没有一项适用于客户端。我不知道我可能会错过什么。有任何想法吗??如果需要,我可以发布更多信息。谢谢!
答
1) 尝试添加下列到视图它要验证
HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
我没有发现有必要修改Web.config,所以你可以删除
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
祝你好运!另外,尝试输入已知的错误值以查看是否触发了客户端验证,所需的注释似乎不足以显示空白输入的消息。
2.) 把下面的脚本放到你的视图中,它应该可以工作。
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
+2
这是行不通的,但我的问题是,我有Views \ web.config中的appsettings,而不是root \ web.config。我不确定它们是如何混淆的,因为默认项目将它们放在根配置中,但它让我陷入循环。 – 2011-02-19 04:41:55
答
试图声明使用公共对象:
public class Post_Validation
{
[Required(ErrorMessage = "Title is required")]
[StringLength(5, ErrorMessage = "Title may not be longer than 5 characters")]
public object Title { get; set; }
[Required(ErrorMessage = "Text is required")]
[DataType(DataType.MultilineText)]
public object Text { get; set; }
[Required(ErrorMessage = "Publish Date is required")]
[DataType(DataType.DateTime)]
public object PublishDate { get; set; }
}
嗨,这可能不再活跃,但我只想问你如何解决这个问题?我在这里面对完全相同的问题,但我不能得到验证文本字段..任何想法??谢谢... – shennyL 2011-10-16 05:20:11