2013-02-20 4 views
0

두 필드에는 필요한 필드가 다른 두 모델이 있으며 두 모델을 표시 할 때 동일한 뷰를 사용할 수 있기를 원합니다.여러 모델에 대해 하나의보기 사용

은 내가 UserEdit 클래스

public abstract class UserEdit 
{ 
    public User User { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string NewPassword { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [EqualTo("NewPassword")] 
    public string ConfirmPassword { get; set; } 

} 

과 NEWPASSWORD 및 ConfirmPassword 속성에 필요한 속성을 추가하는 UserCreate 클래스가 있습니다.

class UserCreate_Metadata 
{ 
    [Required] 
    public string NewPassword { get; set; } 

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

[MetadataType(typeof(UserCreate_Metadata))] 
public partial class UserCreate : UserEdit 
{ 

} 

내가 지금처럼 특정 클래스 모델을 결합하면이 두 뷰에서 잘 작동 :

@model Siaa.NextWeb.Data.UserEdit 

또는

@model Siaa.NextWeb.Data.UserCreate 

보기를 만들 수있는 방법이 있나요 UserCreate 클래스의 추가 유효성 검사 요구 사항을 선택하도록 바인딩 할 클래스를 검색 하시겠습니까? 나는 동적 뷰를 사용했지만, 연구는 편집자

@Html.EditorFor(model => model.User.FirstName) 

답변

0

될이 작업을 수행하는 가장 직관적 인 방법을 만드는 데 사용되는 람다 식으로 저를 지적했다 "식 트리가 동적 작업을 포함 할 수 없습니다"가 나타납니다 항상 두 모델을 하나의 모델에 결합하여 항상보기로 전달합니다. 그런 다음 사용할 모델을 결정하는 플래그를 일종의 모델에 추가하십시오. 보기에 그런

public class UserViewModel { 
    public UserCreate CreateModel { get; set; } 
    public UserEdit EditModel { get; set; } 

    public bool IsCreatingUser { get; set; } 
} 

:

@if (Model.IsCreatingUser) { 
    //Build your form. 
} else { 
    //Build your form. 
} 
+0

변명 내 서식, 내가 일하고 있어요 ... 내가 이렇게하면, 나는 그냥의 각 지점에서 전체보기가 없습니다 만약? @if (Model.IsCreatingUser) {@ Html.EditorFor (모델 => model.UserCreate.NewPassword) 한다} else { > @ Html.EditorFor (모델 => model.UserEdit.NewPassword) >} 등, 각 분야에 대한 등? –

+0

예, 다소 차이가 있습니다. 사이트의 모양과 느낌이 포함 된 전체 사이트 레이아웃 파일이 있어야합니다. 이 특정 페이지의 경우 작업 할 모델에 따라 양식보기를 작성해야합니다. ASP.NET MVC의 경험 수준이 무엇인지 모르겠지만 동적 객체를 뷰에 전달하도록 설계되지 않았습니다. 개인적으로 나는 각 시나리오에 대해 두 가지 다른 시각을 가지고 있습니다. 여분의 일의 양은 그리 많지 않습니다. –

+0

MVC에 처음 접했을 때, 실제로 뷰를 복제하려고하는 것처럼 보였습니다. 내 자연스러운 경향에 반하는 것입니다. 그래서 다른 옵션을 기대했습니다. –

관련 문제