2012-10-05 3 views
1

asp.net mvc3과 함께 ADO.Net 엔터티 프레임 워크를 사용하고 있습니다. 나는 데이터베이스를 먼저 모델로 가지고있다. 데이터 검증은 어떤 경우에는 작동하지 않습니다.엔터티 프레임 워크를 사용한 데이터 유효성 검사

양식을 제출할 때 일부 항목의 유효성이 검사되는 반면 다른 양식은 유효하지 않습니다. 나는 단순히 이름하지 않는 동안

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 


    <fieldset> 
     <legend></legend> 


     <div class="editor-label"> 
      @Html.LabelFor(model => model.VERSION_ID) 
      @Html.EditorFor(model => model.VERSION_ID) 
      @Html.ValidationMessageFor(model => model.VERSION_ID) 
     </div> 

     <div class="editor-field"> 
      @Html.LabelFor(model => model.ENTITY2.Name) 
      @Html.EditorFor(model => model.ENTITY2.Name) 
      @Html.ValidationMessageFor(model => model.ENTITY2.Name) 
     </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 

는 이제 VERSION_ID 검증 작업을 가지고,이 같은 양식을 사용하고 있습니다. 나는 다른 실체에서 이름을 얻고있다. 유효성 검사가 작동하지 않는 이유에 대한 아이디어가 있습니까? 해당 필드가 필요하므로 허용되지 않아야하는 빈 필드를 입력 할 수 있지만 제출을 누르면 오류가 발생합니다.

+0

필드를 필수로 설정했습니다. 내가 프로그램을 실행하고 제출할 때, 그 값을 비워 둘 수 없다는 오류가 발생합니다. 데이터베이스의 첫 번째 모델은 나를 위해 모든 유효성을 설정합니다. – deep

답변

3

Model 클래스에서 빈 값을 허용한다고 생각합니다.

뷰에서 Model 클래스를 직접 사용하지 않고 별도의 ViewModel (POCO 클래스)을 만들지는 않겠습니다. ViewModel에는 뷰에 필요한 관련 속성 만 있어야합니다. 대부분의 경우 도메인 모델의 모든 속성이 아닙니다! 당신은

public class VersionViewModel 
{ 
    [Required] 
    public string VersionID { set;get;} 

    [Required] 
    public string Name { set;get;} 
} 

보기는 강하게이 뷰 모델에 입력 될 것이다 (필수 ... 등 속성) 뷰 모델에 데이터 주석을 사용할 수 있습니다. 조치 메소드에 다시 게시되면 도메인 모델의 ViewModel에서 값을 맵핑하고 저장합니다.

[HttpPost] 
public ActionResult Edit(VersionViewModel model) 
{ 
    if(ModelState.IsValid) 
    { 
    //validation is ok. Let's save 
    var domainModel=new Version(); 
    domainModel.VERSION_ID=model.VersionID ; 
    domainModel.Name=model.Name; 

    //Let's save and REdirect 
    yourRepositary.SaveVersion(domainModel); 
    return RedirectToAction("Saved",new { id=model.ID});  
    } 
    return View(model); 
} 

수동으로 매핑하는 대신 AutoMapper과 같은 라이브러리를 사용하는 것이 좋습니다.

+0

작성한 엔티티에서이 기능이 작동한다고 가정합니다. – deep

+0

당신의 ViewModels은 귀하의 엔티티와 다릅니다. VM은보기에서 조치 방법으로 데이터를 전송하고 되돌려 보낼 수 있습니다. – Shyju

+1

대단히 감사합니다! 아프다. – deep

관련 문제