5

我在 ASP.NET MVC3 Razor 中使用“jQuery Validate Unobtrusive”。

我有一个带有“评论”表单的页面,如下所示:

模型

public class CommentModel
{

    [Required]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [DataType(DataType.Url)]
    [Display(Name = "Website URL")]
    public string WebsiteUrl { get; set; }

    [Required]
    public string Message { get; set; }

}

看法

    @using (Html.BeginForm("AddComment", "Blog", new { @articleID = article.ID }))
    {
        <p>
            @Html.LabelFor(m => m.commentModel.Name)
            @Html.TextBoxFor(m => m.commentModel.Name)
            @Html.ValidationMessageFor(m => m.commentModel.Name)
        </p>
        <p>
            @Html.LabelFor(m => m.commentModel.Email)
            @Html.TextBoxFor(m => m.commentModel.Email)
            @Html.ValidationMessageFor(m => m.commentModel.Email)
        </p>
        <p>
            @Html.LabelFor(m => m.commentModel.WebsiteUrl)
            @Html.TextBoxFor(m => m.commentModel.WebsiteUrl)
            @Html.ValidationMessageFor(m => m.commentModel.WebsiteUrl)
        </p>
        <p>
            @Html.LabelFor(m => m.commentModel.Message)
            @Html.TextAreaFor(m => m.commentModel.Message)
            @Html.ValidationMessageFor(m => m.commentModel.Message)
        </p>
        <p>
            <input type="submit" value="Submit Comment" />
        </p>
    }

但是,当表单被提交时,只有NameEmail返回一个验证错误,什么时候Message应该太:

在此处输入图像描述

如果我Message从更改TextAreaForTextBoxFor,则验证正常工作。

为什么会这样,我怎样才能让验证在我的文本框上工作?


可能还值得注意的是,我不必为此表单编写任何特定的 jQuery。我按照教程解释了这不是必需的,因为它全部由 MVC3 处理。

4

3 回答 3

11

[DataType(DataType.MultilineText)]用数据注解装饰相应的模型属性,并使用Html.EditorForHelper 方法。

[Required]
[DataType(DataType.MultilineText)]
public string Message { get; set; }

现在使用 @Html.EditorForHelper 方法

@Html.EditorFor(m => m.RoleDescription)
于 2012-05-04T20:18:34.460 回答
1

嵌套模型时,这是 TextAreaFor 的错误。可以这么说,将您的 CommentModel 的内容放在“根”模型中,一切都很好。或者,将 TextAreaFor 更改为 TextBoxFor 效果很好!

在一个不相关的话题上,我觉得我不是唯一一个像你一样尝试嵌套我的评论模型的人。这真的应该解决!

编辑: 这是该问题的错误票:

http://aspnet.codeplex.com/workitem/8576

Edit2: Shyju 使用 EditorFor 的解决方法有效!有趣的是,它还在 的输出中添加了一些额外的类名,所以要小心它们不要与你的 CSS 冲突。

于 2012-05-04T20:14:18.363 回答
0

@Shyju 的答案似乎很完美,但我必须在 Site.css 文件中添加一些额外的东西才能使其工作:

应用@Shyju 解决方案并为 textarea 添加 css

textarea.input-validation-error {
    border: 1px solid #e80c4d;
}

现在它完美地工作了。

于 2014-07-09T17:35:55.520 回答