0

必要なフィールドだけが異なる2つのモデルがあり、同じビューを使用して両方を表示できるようにしたいと思います。

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)
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 に答える