我有以下视图模型
public class QuestionarrieAnswersViewModel
{
public long QuestionID { get; set; }
public string Question { get; set; }
[Required(ErrorMessage="required")]
[StringLength(255, ErrorMessage = "Maximum 255 characters are allowed.")]
public string Answer { get; set; }
}
我正在以下面的方式生成视图
@model List<BusinessLayer.Models.ViewModel.QuestionarrieAnswersViewModel>
@using (Ajax.BeginForm("SaveQuestionarrie", "Member", FormMethod.Post, new AjaxOptions { OnBegin = "OnBegin", OnComplete = "OnComplete" }, new { @class = "form-horizontal" }))
{
for(int i=0;i<Model.Count;i++)
{
<div class="control-group">
<div class="head_form">
<label class="control-label">@Model[i].Question</label>
<div class="controls">
@Html.TextAreaFor(m=>m[i].Answer)
@Html.ValidationMessageFor(m => m[i].Answer)
@Html.HiddenFor(m=>m[i].QuestionID)
</div>
</div>
</div>
}
<div class="control-group">
<div class="controls">
<button class="btn" type="submit">Save</button>
</div>
</div>
}
我在上面的模型中的Answer字段上设置了dataannotation,但是如果我以下面的方式生成视图,它在上面的视图中不适用
@model BusinessLayer.Models.ViewModel.QuestionarrieAnswersViewModel
@using (Ajax.BeginForm("SaveQuestionarrie", "Member", FormMethod.Post, new AjaxOptions { OnBegin = "OnBegin", OnComplete = "OnComplete" }, new { @class = "form-horizontal" }))
{
@Html.TextAreaFor(m => m.Answer)
@Html.TextAreaFor(m => m.QuestionID)
<div class="control-group">
<div class="controls">
<button class="btn" type="submit">Save</button>
</div>
</div>
}
这里出了什么问题......
答案 0 :(得分:1)
要启动这些验证规则,您需要使用EditorFor
代替TextAreaFor
。
这是因为TextArea
的验证存在一个突出问题,请参见此处:http://aspnet.codeplex.com/workitem/8576。
答案 1 :(得分:1)
这是由于ASP.NET MVC3发布的jquery.validate.unobtrusive.js版本中的错误。 This answer是同一个bug,解决方法是升级到最新版本的jquery.validate.unobtrusive.js - 从MVC4项目中获取它或使用NuGet更新。
jquery.validate.unobtrusive.js脚本似乎没有版本号,所以如果你在脚本中搜索一个名为 escapeAttributeValue 的函数,那么这是一个脚本版本有这个错误修复。
错误修复中解决的问题是如何处理生成的标记,其中包含需要在jQuery选择器中转义的字符的名称属性。在这种情况下
<textarea cols="20" name="[0].Answer" rows="2"></textarea>
需要这个选择器
$('[name=\\[0\\]\\.Answer]')
答案 2 :(得分:0)
客户端DataAnnotation(验证)不适用于Html.TextAreaFor()帮助程序。
要使其工作,您必须使用[DataType(DataType.MultilineText)]属性修饰'Answer'属性。在视图中,使用Html.EditorFor()帮助程序而不是Html.TextAreaFor()帮助程序方法。
见类似的答案asp.net mvc TextAreaFor is not getting validated as a required field。