Jquery 对带有数据批注的集合进行MVC 3客户端验证--不起作用
我正试图让客户端验证在我的模型上工作——到目前为止它还没有工作 我的模型有一个集合属性:Jquery 对带有数据批注的集合进行MVC 3客户端验证--不起作用,jquery,asp.net-mvc,asp.net-mvc-3,validation,data-annotations,Jquery,Asp.net Mvc,Asp.net Mvc 3,Validation,Data Annotations,我正试图让客户端验证在我的模型上工作——到目前为止它还没有工作 我的模型有一个集合属性: public class NewsEventsModel { public List<NewsItemDetails> newsItems { get; set; } public int pageNumber { get; set; } public int totalPages { get; set; } public bool canManageNews {
public class NewsEventsModel
{
public List<NewsItemDetails> newsItems { get; set; }
public int pageNumber { get; set; }
public int totalPages { get; set; }
public bool canManageNews { get; set; }
public long userID { get; set; }
}
我将NewsEventsModel发送到视图。那么在我看来我包括
<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>
那么在视图代码中我有
for (int j = 0; j < Model.newsItems.Count(); j++)
{
/// bunch of stuff
// then:
<div class="editblock">
@Html.TextAreaFor(model => model.newsItems[j].newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" })
@Html.ValidationMessageFor(model => model.newsItems[j].newsBody)
</div>
}
for(int j=0;jmodel.newsItems[j].newsBody,新{@class=“formtextem”,id=editBoxID,rows=“10”,style=“width:54em”})
@Html.ValidationMessageFor(model=>model.newsItems[j].newsBody)
}
但是,当我删除文本区域中的所有文本并单击“保存”时,不会显示“必需”消息。。当我违反任何其他规则时,也不会出现任何消息
但是,如果我在顶级NewsEventsModel中的一个属性上放置验证注释,然后将其作为文本框包含在视图中,则客户端验证确实有效。它只是不适用于较低级别的NewsItemDetails类
我缺少什么?尝试在视图中使用编辑器模板:
@Html.EditorFor(x => x.newsItems)
和内部~/Views/Shared/EditorTemplates/NewsItemDetails.cshtml
:
@model AppName.Models.NewsItemDetails
// bunch of stuff
// then:
<div class="editblock">
@Html.TextAreaFor(model => model.newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" })
@Html.ValidationMessageFor(model => model.newsBody)
</div>
@model-AppName.Models.NewsItemDetails
//一堆东西
//然后:
@Html.TextAreaFor(model=>model.newsBody,new{@class=“formtextem”,id=editBoxID,rows=“10”,style=“width:54em”})
@Html.ValidationMessageFor(model=>model.newsBody)
真管用!到目前为止,我还没有研究过模板,但现在我会,因为我看到了它们的强大功能。谢谢我唯一需要改变的是使用@Html.EditorFor(x=>x.newitems[j])——因为它是在一个循环中。否则,每次通过循环,MVC都会为集合中的所有项目生成文本框(起初我没有注意到,因为在用户单击“编辑”之前,它们是隐藏的)。但在其他情况下,这可能是一个理想的结果——很高兴知道。
@model AppName.Models.NewsItemDetails
// bunch of stuff
// then:
<div class="editblock">
@Html.TextAreaFor(model => model.newsBody, new { @class = "formtextem", id = editBoxID, rows = "10", style = "width: 54em" })
@Html.ValidationMessageFor(model => model.newsBody)
</div>