2014-06-23 1 views
1

Entity Framework 6과 함께 MVC 4 응용 프로그램을 개발 중이며 데이터 주석에 문제가 있습니다. 내가 사용하는 주석이 무엇이든 관계없이 유효하지 않습니다. 뷰에서클라이언트 또는 서버 유효성 검사가 데이터 주석과 함께 작동하지 않습니다.

public class UserViewModel 
    { 
     [Required(ErrorMessage = "First Name is required")] 
     [Display(Name = "First Name")] 
     [StringLength(100, MinimumLength = 2)] 
     public string FirstName { get; set; } 
     ... 
    } 

: 나는 양식을 렌더링하기 위해 다음 뷰 모델을 사용하고

@Html.LabelFor(m => m.FirstName) 
@Html.EditorFor(m => m.FirstName) 
@Html.ValidationMessageFor(m => m.FirstName) 

을 그리고 렌더링됩니다 :

<label for="FirstName">First Name</label> 
<input class="text-box single-line" id="FirstName" name="FirstName" type="text" value="" /> 
<span class="field-validation-valid" data-valmsg-for="FirstName" data-valmsg-replace="true"></span> 

난 제출 버튼을 클릭하면 클라이언트 유효성 검사가 트리거되지 않고 컨트롤러에서 ModelState.IsValid가 true입니다.

UPDATE :

컨트롤러 :

[HttpGet] 
     public ActionResult Edit(int? Id) 
     { 
      var model = _userService.GetUserById(Id); 
      return View(model); 
     } 

     [HttpPost] 
     public ActionResult Edit(UserViewModel model) 
     { 
      if (ModelState.IsValid == true) 
      { 
       _userService.Save(model); 
       return View(model); 
      } 

      return View(model); 
     } 
+0

컨트롤러 작업에서 코드를 게시 할 수 있습니까? – mai

+0

보기에 자바 스크립트 파일을 포함 시켰습니까? – Fals

+0

ajax를 통해 양식을로드하고 있습니까? –

답변

0

문제는 당신이 컨트롤러에 POST 것입니다, 당신은 User 객체가 아닌 UserViewModel에 매핑합니다. 이것이 서버 측 유효성 검사가 실행되지 않는 이유 중 하나입니다.

클라이언트 쪽 유효성 검사에 대해서는 확실하지 않지만 동일한 오류 일 수 있습니다.보기는 UserViewModel이 아닌 User 유형을 기반으로합니다.

[HttpGet] 
public ActionResult Edit(int? Id) 
{ 
    var model = _userService.GetUserById(Id); 
    var viewModel = new UserViewModel() 
     { 
      FirstName = model.FirstName, 
      LastName = model.LastName, 
      // other properties 
     }; 
    return View(viewModel); 
} 

[HttpPost] 
public ActionResult Edit(UserViewModel viewModel) 
{ 
    if (ModelState.IsValid == true) 
    { 
     var model = new User() 
     { 
      FirstName = viewModel.FirstName, 
      LastName = viewModel.LastName, 
      // other properties 
     }; 

     _userService.Save(model); 
     return View(model); 
    } 

    return View(model); 
} 

을 그리고 당신의 Edit.cshtml 당신이 @model UserViewModel을 가져야한다 위에 :

그래서 컨트롤러는 다음과 같이한다.

희망이 나는 문제가 Ninject.Web.MVC의 DLL 것을 발견 내 프로젝트를 재 작성한 후에

+0

어제 제가 말씀 드렸다시피 UserViewModel이 있지만 문제를 해결하기 위해 사용자로 변경했으며 여기에서 복사 할 때 변경하는 것을 잊어 버렸습니다. 그것은 똑같이 행동합니다. – Laura

+0

그런 경우에는보기 및 수업의 전체 목록을 보여 주어야합니다. 그렇지 않으면 문제 해결에 필요한 정보가 충분하지 않습니다. – trailmax

0

을하는 데 도움이됩니다. 내 프로젝트에서이 DLL을 사용하지 않았으므로 제거하고 작동했습니다.

관련 문제