1

我有以下视图模型

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 字段上设置了数据注释,但是如果我以下面的方式生成视图,它不会在上面的视图中应用

@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>
}

这里出了什么问题...

4

3 回答 3

1

为了触发这些验证规则,您需要使用 aEditorFor而不是 a TextAreaFor

这是因为TextArea's 的验证存在一个突出问题,请参见此处:http ://aspnet.codeplex.com/workitem/8576 。

于 2013-02-28T09:15:45.917 回答
1

这是由于随 ASP.NET MVC3 发布的 jquery.validate.unobtrusive.js 版本中的一个错误。 这个答案是在同一个错误上,解决方案是升级到最新版本的 jquery.validate.unobtrusive.js - 从 MVC4 项目中获取它或使用 NuGet 更新。

jquery.validate.unobtrusive.js 脚本似乎没有版本号,因此如果您在脚本中搜索名为escapeAttributeValue的函数,那么这是具有此错误修复的脚本版本。

错误修复中解决的问题是如何处理生成的标记,其名称属性包含需要在 jQuery 选择器中转义的字符。在这种情况下

<textarea cols="20" name="[0].Answer" rows="2"></textarea>

需要这个选择器

$('[name=\\[0\\]\\.Answer]')
于 2013-02-28T09:46:19.507 回答
0

客户端 DataAnnotation(验证)不适用于 Html.TextAreaFor() 助手。

要使其工作,您必须使用 [DataType(DataType.MultilineText)] 属性装饰“Answer”属性。并且在视图中,使用 Html.EditorFor() 帮助器而不是 Html.TextAreaFor() 帮助器方法。

请参阅类似的 SO 答案asp.net mvc TextAreaFor is not gettingvalidated as a required field

于 2013-02-28T08:46:07.473 回答