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

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

1 回答 1

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.
}
于 2013-02-20T14:37:25.837 回答