Asp.net mvc 4 对多个模型使用一个视图

Asp.net mvc 4 对多个模型使用一个视图,asp.net-mvc-4,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; } [DataTy

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

我有一个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; }

}
以及UserCreate类,该类将所需属性添加到NewPassword和ConfirmPassword属性

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

有没有一种方法可以让视图检测它绑定到哪个类,从而获取UserCreate类的额外验证需求?我尝试使用动态视图,但收到一个“表达式树可能不包含动态操作”,这项研究已将我指向用于创建编辑器的lambda表达式

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

最直观的方法是将两个模型组合到一个模型上,并始终传递到视图。然后简单地在模型上添加某种标志,确定应该使用哪一种

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.
}

请原谅我的格式化,我正在处理。。。如果我这样做了,我不是就可以看到If的每个分支的完整视图吗@对于每个字段,如果(Model.IsCreatingUser){@Html.EditorFor(Model=>Model.UserCreate.NewPassword)}或者{>@Html.EditorFor(Model=>Model.UserEdit.NewPassword)>}等等?是的,或多或少。您应该有一个包含站点外观的总体站点布局文件。然后,对于这个特定的页面,您应该根据需要使用的模型构建表单视图。我不确定您对ASP.NET MVC的体验水平,但是,它不是为将动态对象传递给视图而设计的。就我个人而言,我对每种情况都有两种不同的看法;额外的工作量并没有那么多。对于MVC来说,这是一个全新的概念,它似乎真的促使我复制视图,这与我的自然倾向相反,所以我希望有另一种选择。
@if (Model.IsCreatingUser) {
    //Build your form.
} else {
    //Build your form.
}