2012-04-24 3 views
5

ASP.NET MVC3 Razor에서 "jQuery Validate Unobtrusive"를 사용하고 있습니다.jQuery Validate 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

그때 검증이 제대로 작동 TextBoxForTextAreaFor에서 Message를 변경하는 경우.

왜 그런가요? 텍스트 상자에서 유효성 검사를 수행하려면 어떻게해야합니까?


그것은 또한 내가이 양식에 대한 특정 jQuery를 쓸 수 없었습니다 주목할 수 있습니다. 나는 이것이 MVC3에 의해 모두 다뤄질 때 필요하지 않다고 설명하는 튜토리얼을 따랐다.

+0

컨트롤러 코드를 포함 할 수 있습니까? 또한 레이아웃이나보기에 jquery.validate와 jquery.validate.unobtrusive를 모두 포함 했습니까? –

+0

@ ron.defreitas 어떤 컨트롤러 방식입니까? 분명히'HttpPost' 메쏘드는 클라이언트 쪽 유효성 검사가 그것을 막고 있기 때문에 도달하지 못하기 때문에 관련이 없습니다. 레이아웃 파일을 확인했는데'jquery-1.5.1.min.js','jquery.validate.min.js' 및'jquery.validate.unobtrusive.js'를 포함 시켰습니다. – Curt

+0

양식의 렌더링 된 원본을보고 데이터 유효성 속성이 나머지 필드와 마찬가지로 텍스트 영역에 추가되었는지 확인할 수 있습니까? 백엔드가 입력란에 입력 내용이 있다고 생각하는지 확인하기 위해 양식 POST를 단계별로 실행 해 보았습니까? –

답변

10

[DataType(DataType.MultilineText)] 데이터 주석으로 해당 모델 속성을 장식하고 Html.EditorFor 도우미 메서드를 사용하십시오.

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

지금 사용 @Html.EditorFor 도우미 방법

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

모델이 중첩되어있을 때 TextAreaFor와 관련된 버그입니다. CommentModel의 내용을 "루트"모델에 넣어 말하면 모든 것이 효과적입니다. 또는 TextAreaFor를 TextBoxFor로 변경하면 멋지게 작동합니다!

관련없는 주제에서 나는 당신처럼 내 의견 모델을 시도하고 중첩 할 수있는 유일한 사람이 아니라고 생각합니다. 이것은 정말로 고쳐야합니다!

편집 :

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

Edit2가 : EditorFor를 사용 Shyju의 해결 방법은 작동 여기 이 문제에 대한 버그 티켓입니다! 흥미롭게도이 클래스의 출력에 클래스 이름을 추가하기 때문에 CSS와 충돌하지 않도록주의하십시오.

0

@Shyju의 대답은 완벽하게 작동하는 것 같다,하지만 난 그것이 작동되도록하기 위해 Site.css 파일에 추가 무언가를 추가했다 :

@Shyju 솔루션을 적용하고 텍스트 영역의 CSS를 추가

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

이제 완벽하게 작동합니다.

관련 문제