2012-04-24 100 views
5

我在ASP.NET MVC3 Razor中使用“jQuery Validate Unobtrusive”。jQuery验证Unobtrusive不适用于TextArea

我有一个网页一个 “备注” 形式,像这样:

型号

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太:

enter image description here

如果我改变MessageTextAreaForTextBoxFor,然后验证正常工作。

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


也可能值得注意的是我没有必要为这个表单写任何特定的jQuery。我跟着一个教程解释这不是必需的,因为它全部由MVC3处理。

+0

你可以包含你的控制器代码吗? 此外,您是否在布局或视图中同时包含jquery.validate和jquery.validate.unobtrusive? – 2012-04-24 16:38:28

+0

@ ron.defreitas哪种控制器方法?当然'HttpPost'方法不相关,因为客户端验证阻止了这个方法,所以没有达到。我检查了我的布局文件,包括:'jquery-1.5.1.min.js','jquery.validate.min.js'&'jquery.validate.unobtrusive.js'。 – Curt 2012-04-24 20:21:46

+0

您可以查看表单的呈现源并确保数据验证属性已添加到文本区域中,如同其他字段一样吗?您是否尝试通过表单的POST来查看后端是否认为框中有输入内容? – 2012-04-26 07:44:47

回答

10

[DataType(DataType.MultilineText)]数据注释来装饰相应的模型属性并使用Html.EditorFor帮助器方法。

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

现在使用@Html.EditorFor Helper方法

@Html.EditorFor(m => m.RoleDescription) 
1

这是模型嵌套时TextAreaFor的错误。把你的CommentModel的内容放在“根”模型中,这样说话,一切都很好。或者,将TextAreaFor更改为TextBoxFor,它的效果非常好!

在一个不相关的话题上,我觉得验证了我不是唯一一个像你一样尝试嵌套我的评论模型的人。这应该确实是固定的!

编辑: 下面是问题的bug票:

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

EDIT2:使用EditorFor的 Shyju的变通办法!有趣的是,它也为输出添加了一些额外的类名,所以要小心它们不会与你的CSS冲突。

0

从@Shyju答案似乎完美地工作,但我不得不额外的东西添加到文件的site.css,使其工作:

申请@Shyju解决方案并添加css for textarea

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

现在它完美的工作。