使用一个View for Multiple Model

时间:2013-02-20 14:31:32

标签: asp.net-mvc-4

我有两个模型只是因需要的字段而不同,我希望能够使用相同的视图来显示它们。

我有一个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类的额外验证要求?我尝试使用动态视图,但收到“表达式树可能不包含动态操作”,研究已经向我指出了用于创建编辑器的lambda表达式

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

1 个答案:

答案 0 :(得分: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.
}