2010-05-05 4 views
1

내가 바보처럼 검색 한하지만 훨씬 똑똑하지 않습니다 ..MVC 2 검증 및 엔티티 프레임 워크

내가 엔티티 프레임 워크 4와 자신의 POCO 클래스를 사용하고 내가 확인을 위해 DataAnnotations을 사용하고 싶습니다. 아무런 문제가 없습니다. 인터넷에서 내가하는 일에 대해 얼마나 많은 시간을 할애하고 있습니까? 그러나 ViewModels에서 유효성 검사를 대신 수행하고 내보기에서 내 POCO 클래스를 사용하여 데이터를 표시하지 않는 것이 가장 좋습니다. 어떻게해야합니까? 내 리포지토리가 내 POCO 클래스에서 obejekt를 반환하기 때문에 AutoMapper를 사용하여 모든 것을 작동 시키려고 시도했지만 ModelState.IsValid에서 아무것도 업데이트하거나 변경하려고하면 항상 false가됩니다.

영어 실력이 정말 좋지 않습니다. 내가 대신 오늘을하고있는 중이 야 방법을 보여 내 POCO

public partial User { 
    public int Id { get; set; } 
    public string UserName { get; set; } 
    public string Password { get; set; } 
} 

그리고 내 뷰 모델

public class UserViewModel { 
    public int Id { get; set; } 

    [Required(ErrorMessage = "Required")] 
    public string UserName { get; set; } 

    [Required(ErrorMessage = "Required")] 
    public string Password { get; set; } 
} 

컨트롤러 :

public ActionResult Edit(int id) { 
    User user = _userRepository.GetUser(id); 
    UserViewModel mappedUser = Mapper.Map<User, UserViewModel>(user); 

    AstronomiGuidenModelItem<UserViewModel> result = new AstronomiGuidenModelItem<UserViewModel> { 
     Item = mappedUser 
    }; 

    return View(result); 
} 

[HttpPost] 
public ActionResult Edit(UserViewModel viewModel) { 
    User user = _userRepository.GetUser(viewModel.Id); 
    Mapper.Map<UserViewModel, User>(viewModel, user);  

    if (ModelState.IsValid) { 
     _userRepository.EditUser(user); 

     return Redirect("/"); 
    } 

    AstronomiGuidenModelItem<UserViewModel> result = new AstronomiGuidenModelItem<UserViewModel> { 
     Item = viewModel 
    }; 

    return View(result); 
} 

이제 데이터베이스 유효성 검사가 올바르게 작동하지만 데이터베이스를 보내고 업데이트하려고하면 값이 null 인 것으로 나타났습니다. 나는 이런 식으로 하나의 메인 뷰 모델을 보이는 것을 :

public class AstronomiGuidenModelItem<T> : AstronomiGuidenModel { 
    public T Item { get; set; } 
} 

왜 내 "UserViewModel 뷰 모델"널 다음 내가 편집하려고 r에?

답변

1

유효성 검사가 작동하는 경우 UserViewModel viewModel은 null이 아니어야합니다 ... 또는 클라이언트 측 유효성 검사가 작동하지만 서버 측은 작동하지 않습니까?

그럴 경우 HTML이 생성 될 수 있습니다. 예를 들어

,보기에 당신이있는 경우 :

<%: Html.TextBoxFor(x => x.Item.UserName) %> 

가능하게 될 수 렌더링!하는 HTML :

<input name="Item.UserName" id="Item_UserName" /> 

이 서버에 바인딩에 도달 할 때, 그것은해야합니다 action 매개 변수의 이름은 입력 접두사 (Item)와 동일해야합니다. 예 :

public ActionResult Edit(UserViewModel item) { 

위와 같이 수행하고 item에 액션 매개 변수를 변경,이 문제를 얻으려면, 또는 당신은 모델의로 UserViewModel 소요 별도의 PartialView에 양식을 캡슐화 할 수 - Html.TextBoxFor가 렌더링되지 않습니다 그런 식으로 접두어.

HTHs,
찰스

시. 내가 완전히 벗어난 경우보기 용 코드를 게시 해 주시겠습니까?

+0

'UserViewModel'은 'AstronomiGuidenModelItem '이어야합니다. –

관련 문제