2017-09-28 2 views
0

DropDownListFor 페이지 제출시 기본 옵션을 사용할 때 유효성 검사 오류 메시지가 표시되지 않습니다. 페이지를 제출할 수는 있지만 오류를 던지지는 않습니다. 드롭 다운 목록을 제외한 다른 유효성 검사 메시지가 표시됩니다.dropdownlistfor가 오류 메시지를 표시하지 않습니다.

public class CallLogViewModel 
{ 
    [Required(ErrorMessage = "please select")] 
    [Display(Name = "Details of Issue/Incident")] 
    public IEnumerable<IssueCategory> IssueDetails { get; set; } 
    public int SelectedIssue { get; set; } 

    public CallLogViewModel() 
    { 
     HomeRepository hr = new HomeRepository(); 
     IssueDetails = hr.GetIssueCategories();//gets the list 
    }  
} 

public class IssueCategory 
{ 
    public int UniqueId { get; set; } 
    public string Issue { get; set; } 
} 

Controller.cs

public ActionResult Index() 
{ 
    var viewModel = new CallLogViewModel(); 
    return View(viewModel); 
} 

보기 당신은 당신의 결합을하지 재산의 SelectListValidationMessageFor()을 적용

<div class="form-group"> 
    @Html.LabelFor(model => model.IssueDetails, htmlAttributes: new { @class = "control-label col-md-3" }) 
    <div class="col-md-9"> 
     @Html.DropDownListFor(model => model.SelectedIssue, new SelectList(Model.IssueDetails, "UniqueId", "Issue", Model.SelectedIssue), "Please Select",new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.IssueDetails,"", new { @class = "text-danger" }) 
    </div> 
</div> 

의 Web.config

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

답변

0

.

은 (

public class CallLogViewModel 
{ 
    public IEnumerable<IssueCategory> IssueDetails { get; set; } 
    // Apply the attributes to the property your binding to 
    [Required(ErrorMessage = "please select")] 
    [Display(Name = "Details of Issue/Incident")] 
    public int SelectedIssue { get; set; } 
    .... 

로 모델을 변경하고

<div class="form-group"> 
    @Html.LabelFor(m => m.SelectedIssue, new { @class = "control-label col-md-3" }) 
    <div class="col-md-9"> 
     @Html.DropDownListFor(m => m.SelectedIssue, new SelectList(Model.IssueDetails, "UniqueId", "Issue"), "Please Select",new { @class = "form-control" }) 
     @Html.ValidationMessageFor(m => m.SelectedIssue, "", new { @class = "text-danger" }) 
    </div> 
</div> 

참고 또한 SelectList 생성자의 4 번째 매개 변수가 필요하지 않습니다 SelectedIssue 속성에 라벨 및 검증 메시지를 결합하는보기를 변경

SelectListItemSelected 속성은 DropDownListFor() 메소드에서 무시되지만보기 모델을 사용하기 때문에 속성은 public IEnumerable<SelectListItem> IssueDetails { get; set; }이어야합니다. e는 GET 방법이고보기는 간단합니다

@Html.DropDownListFor(m => m.SelectedIssue, Model.IssueDetails, "Please Select", new { @class = "form-control" }) 
+0

게시물을 가져 주셔서 감사합니다. 잘 작동합니다. 잠깐 질문을 드리 자면, 드롭 다운 목록 항목은 uniqueid를 가진 데이터베이스 테이블 Issuecategory에 나열된 항목이어야하고 열로 발행되어야합니다. 그래서 방금 사용했습니다. 그것은 selectlistitem 잘 작동하지만 왜 우리 iterumerable의 일환으로 Datatable IssueCategory를 사용할 수 없다 – ChinnaR

+0

selectlistitem 또는 issuecategory 클래스를 ienumerable로 사용하여 모범 사례를 제안 해 주시겠습니까? 그리고 왜? – ChinnaR

+0

당신은 할 수 있지만, 더 나은 방법은'public IEnumerable IssueDetails {get; 세트; }'를 사용하여 GET 메소드에서 설정하십시오. (예 :'Model.IssueDetails = hr.GetIssueCategories(), UniqueId ","Issue ");'(또는'model.IssueDetails = hr.GetIssueCategories()) .Select (x => 새로운 SelectListItem (값 = x.UniqueId.ToString(), Text = x.Issue})); –

관련 문제