2012-04-24 105 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; 
} 

現在它完美的工作。