我有一个数据输入字段,用于收集笔记。每个便笺都需要便笺数据元素。这是我的模型:

public interface INoteDataEntryViewModel : IMobilePageDataContract
{
    int CourseId { get; set; }

    [Required(ErrorMessage = @"Note is required")]
    String Note { get; set; }

    [DisplayName(@"Note Date")]
    DateTime NoteDate { get; set; }
}

您可以看到我具有Note属性的Required属性。

我正在使用Razor显示数据输入表单元素:
<div data-role="fieldcontain">
    @Html.LabelFor(m => m.Note)
    @Html.TextAreaFor(m => m.Note)
    @Html.ValidationMessageFor(m => m.Note)
</div>

当我使用“@ Html.TextAreaFor”时,没有对必填字段的验证,因此我可以提交表单。但是,如果我更改为“@ Html.TextBoxFor”,则会对必填字段进行验证,并且无法提交表单。关于为何TextAreaFor验证失败的任何想法?我正在使用毫不客气的ajax和jQueryMobile。

谢谢你的帮助。

最佳答案

客户端验证不适用于Html.TextAreaFor()帮助器,这是related issue reported on Codeplex

要使其工作,您必须使用[DataType(DataType.MultilineText)]属性装饰'Note'属性。并且在 View 中,使用Html.EditorFor() helper而不是Html.TextAreaFor() helper方法。

更新型号:

public interface INoteDataEntryViewModel : IMobilePageDataContract
{
    int CourseId { get; set; }

    [Required(ErrorMessage = @"Note is required")]
    [DataType(DataType.MultilineText)]
    String Note { get; set; }

    [DisplayName(@"Note Date")]
    DateTime NoteDate { get; set; }
}

看法:
<div data-role="fieldcontain">
    @Html.LabelFor(m => m.Note)
    @Html.EditorFor(m => m.Note)
    @Html.ValidationMessageFor(m => m.Note)
</div>

09-25 19:09