2012-02-24 3 views
0

스택 및 온라인 자습서에서 모두 권장되는 작업을 모두 수행 한 후에는 유효성 검사 작업을 수행 할 수 없습니다. 내가 이것을 올바르게 설정 했니? 모든 지침을 많이 주시면 감사하겠습니다! 나는 아래와 같이 설정MVC 3 면도기 DropdownList 클라이언트 쪽 ValidationMessage

편집
지능 지금 제안에 따라 널 (NULL)입니다. 그러나 여전히 작동하지 않습니다.

모델

public class Subscribers 

     [Display(Name = "Channel: ")] 
     [Required(ErrorMessage = " Channel is required")] 
     public int? SelectedChannelID { get; set; } 

     public IEnumerable<SelectListItem> ChannelSelectList 
       { 
        get 
        { 
         Models.SwitchboardEntities db = new Models.SwitchboardEntities(); 
         List<Models.Channel> channelList = db.Channels.ToList(); 

         IEnumerable<SelectListItem> selectList = 
          from channel in channelList 
          select new SelectListItem 
          { 
           Text = channel.name, 
           Value = channel.id.ToString() 
          }; 

         return selectList; 
        } 

       } 

보기 코멘트 ABO보다

@model Switchboard.Models.Subscribers 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

     @Html.LabelFor(xModels => xModels.SelectedChannelID) 
     @Html.DropDownListFor(x => x.SelectedChannelID, Model.ChannelSelectList, "--Select Channel--", new Dictionary<string, object> { { "id", "ChannelsDDL" } }) 
     @Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)  

webconfig

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
+1

레이아웃이나 특정보기에'jquery.validate.unobtrusive.js' 파일을 포함 시켰습니까? JS 오류가 발생합니까? –

+0

공정한 포인트. 나는 그것들을 포함 시켰습니다. JS 오류가 없습니다. – EKet

+0

당신은 무엇을 기대하고 있습니까? 유효성 검사가 발생하지 않는 것을 어떻게 알 수 있습니까? 코드에서 사용자가 드롭 다운에서 항목을 선택하지 않았지만 드롭 다운에서 항목을 선택하지 않을 수있는 유일한 무효 상태가 나타납니다. –

답변

0

이 드롭 다운이 양식 안에 있어야합니다. 클라이언트 측 유효성 검사가 작동하려면 당신은 어떤 HTML5를 방출하지 않습니다 양식 컨텍스트하거나 HTML 도우미를 필요로 데이터 - * 속성 :

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(xModels => xModels.SelectedChannelID) 
    @Html.DropDownListFor(
     x => x.SelectedChannelID, 
     Model.ChannelSelectList, 
     "--Select Channel--", 
     new Dictionary<string, object> { { "id", "ChannelsDDL" } } 
    ) 
    @Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)  
    <button type="submit">OK</button> 
} 

을이 (예를 들어 폼 내부가 아닌 경우이 드롭 다운 목록은 내부에 생성 된 페이지의 소스 코드에서

@{ 
    ViewContext.FormContext = new FormContext(); 
} 

@Html.LabelFor(xModels => xModels.SelectedChannelID) 
@Html.DropDownListFor(
    x => x.SelectedChannelID, 
    Model.ChannelSelectList, 
    "--Select Channel--", 
    new Dictionary<string, object> { { "id", "ChannelsDDL" } } 
) 
@Html.ValidationMessageFor(xModels => xModels.SelectedChannelID)  

봐 :) 부분과 대응하는 형태로이 부분의 외부 수동 ​​도우미가 필요한 속성을 생성 강제로 양식 상황을 시뮬레이션 할 수 있습니다. <select> 태그 데이터 -이 * 그런 속성을 HTML5로 장식되어 있는지 확인하십시오이없는 데이터 - * 속성 클라이언트 측 유효성 검사가 작동하지 않을 수 있습니다

<select data-val="true" data-val-number="The field Channel: must be a number." data-val-required=" Channel is required" id="ChannelsDDL" name="SelectedChannelID"> 
    ... 
</select> 

합니다.

물론 서버 측 유효성 검사는 모든 경우에 적용됩니다.

+0

얼굴이 손에 ... 양식을 잊어 버렸습니다. Darin 감사합니다. – EKet

0

기타 또한 web.config에서 눈에 거슬리지 않은 유효성 검사가 설정되어 있는지 확인하십시오.

1

어떻게 유효성을 확인할 수 있는지는 알 수 없습니다.

SelectedChannelID은 int이며 null이 아닙니다. 따라서 항상 선택된 값을가집니다. 따라서 Required는 절대 실행되지 않습니다. 값이 null 일 경우 Required가 실행되며, int를 사용하면 불가능합니다.

+0

은 int를 null로 만들었습니다. 여전히 문제. 고마워요 미스테레! – EKet

+1

추가 분석시.컨트롤의 ID 이름을 바꾸는 중입니다. 네가 그렇게하지 않으면 어떻게 될까? –

+0

Mystere Man이 여기 있다고 생각합니다. ValidationMessageFor는 유효성을 검사하는 컨트롤의 추정 ID를 가리키며,이 ID는 속성의 이름으로 간주됩니다. –