2016-11-03 4 views
0

내 MVC 프로젝트에 다음 viewmodel 있습니다.@ html.validationmessagefor가 오류 메시지를 표시하지 않습니다

public class AddGISViewModel 
{ 
    public myproject.Models.DomainModels.GIS gis { get; set; } 
    public IEnumerable<myproject.Models.DomainModels.Companies> Companies { get; set; } 
    public long CompanyID { get; set; } 
} 

나는 메타 데이터를 다음 또한 내가 만든이

@model myproject.ViewModels.GIS.AddGISViewModel 
@using (Ajax.BeginForm("Create", "GIS", new AjaxOptions { HttpMethod = "Post", Url = "/GIS/Create" })) 
{ 
@Html.AntiForgeryToken() 
<div class="form-horizontal"> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.Label("company", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(model => model.CompanyID, new SelectList(Model.Companies, "CompanyID", "Name"), "select company please ", htmlAttributes: new {@class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.CompanyID) 
     </div> 
    </div> 

로보기를 만든

[Required(ErrorMessage = "you should select company")] 
    [DisplayName("company")] 
    [Display(Name = "company")] 
    public long CompanyID { get; set; } 

난 안 '회사 ID는 필수 필드입니다'@validationmessagefor 쇼 내 프로젝트를 실행할 때 메타 데이터에서 정의한 '회사를 선택해야합니다.' 이 문제를 어떻게 해결할 수 있습니까?

+0

그 속성을'AddGISViewModel' 클래스에 적용하십시오. –

+0

고맙습니다. addGISViewModel에 thos 속성을 적용하면 효과가 있습니다. 이 방법 대신에 어떤 방법이 있습니까? –

+0

왜 올바른 방법으로하고 싶지 않습니까? (디스플레이 및 유효성 검사 속성을 포함하여 뷰에 필요한 것을 정확히 나타내야하는 뷰 모델을 만들었습니다.) –

답변

0

뷰 모델을 만들었으므로 이러한 특성을 뷰 모델의 속성에 적용하십시오. 뷰 모델의 목적은 뷰에서 표시/편집하려는 것을 나타 내기위한 것이므로 메타 데이터에 대해 별도의 클래스를 만드는 것이 중요하지 않습니다.

로보기 모델이되도록

public class AddGISViewModel 
{ 
    [Required(ErrorMessage = "you should select company")] 
    [DisplayName("company")] 
    public long? CompanyID { get; set; } 
    public IEnumerable<SelectListItem> Companies { get; set; } 
    .... 
} 

CompanyID 속성에서-게시 공격으로부터 보호하기 위해 Null을 허용해야한다는주의하고, 회사 n은 드롭 다운리스트가 IEnumerable을해야을 표시하기위한 컬렉션 속성, 있어야 보기는 해당 모델의 속성은 편집하면

@Html.DropDownListFor(model => model.CompanyID, Model.Companies, "select company please ", new { @class = "form-control" }) 

는 또한, 뷰 모델은 데이터 모델을 포함해서는 안됩니다. 그렇다면 GIS gisGIS의 각 속성으로 바꾸십시오.

관련 문제