2012-04-24 15 views
5

Używam "jQuery Validate Unftrusive" z Brzytwką ASP.NET MVC3.jQuery Validate Unobtrusive nie działa dla TextArea

Mam stronę z "Uwagi" formularza, takich jak to:

model

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

} 

Zobacz

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

Jednak, gdy formularz jest składany, tylko Name i Email zwraca błąd sprawdzania poprawności, gdy Message powinno być zbyt:

enter image description here

Jeśli zmienię Message z TextAreaFor do TextBoxFor, wtedy walidacja działa poprawnie.

Dlaczego tak jest i jak mogę sprawdzić poprawność działania w moim polu tekstowym?


Warto również zauważyć, że nie musiałem pisać żadnego konkretnego jQuery dla tego formularza. Poszedłem za tutorialem, który wyjaśnił, że nie jest to wymagane, ponieważ wszystkie obsługiwane przez MVC3.

+0

Czy możesz podać swój kod kontrolera? Czy uwzględniłeś również jquery.validate i jquery.validate.unobtrusive w swoim układzie lub widoku? –

+0

@ ron.defreitas Jaką metodę kontrolera? Z pewnością metoda 'HttpPost' nie byłaby trafna, ponieważ nie została osiągnięta, ponieważ zapobiega to walidacja po stronie klienta? Sprawdziłem plik Layout, dodałem: 'jquery-1.5.1.min.js',' jquery.validate.min.js' & 'jquery.validate.unobtrusive.js'. – Curt

+0

Czy można wyświetlić renderowane źródło formularza i upewnić się, że atrybut sprawdzania poprawności danych został dodany do obszaru tekstowego, podobnie jak pozostałe pola? Czy próbowałeś przejść przez POST swojego formularza, aby sprawdzić, czy backend uważa, że ​​dane wejściowe znajdują się w polu? –

Odpowiedz

10

Udekoruj odpowiednią właściwość modelu za pomocą [DataType(DataType.MultilineText)] adnotacji danych i użyj metody pomocniczej Html.EditorFor.

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

Teraz użyj @Html.EditorFor Helper metoda

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

To błąd z TextAreaFor, gdy model jest zagnieżdżony. Umieść zawartość swojego CommentModel w modelu "root", aby tak rzec, i wszystko działa świetnie. Lub zmień TextAreaFor na TextBoxFor i działa świetnie!

W przypadku niepowiązanych tematów czuję się zweryfikowany, że nie jestem jedynym, który próbowałby zagnieździć mój model komentarza tak, jak Ty. Naprawdę powinno to być naprawione!

Edit: Oto bilet bug do wydania:

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

Edit2: obejście Shyju polegające na stosowaniu EditorFor działa! Co ciekawe, dodaje również kilka dodatkowych nazw klas do wyjścia, więc uważaj, aby nie były one w konflikcie z twoim CSS.

0

Odpowiedź z @Shyju wydaje się doskonale działa, ale musiałem dodać coś dodatkowego do pliku Site.css aby to działało:

Zastosuj rozwiązanie @Shyju i dodaj css dla textarea:

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

Teraz działa idealnie.