1. ホーム
  2. asp.net-mvc

[解決済み】1つのビューに複数のモデルを表示する

2022-03-27 12:49:20

質問

1つのビューに2つのモデルを表示させたいのですが、どうすればいいですか?ページには LoginViewModelRegisterViewModel .

など

public class LoginViewModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}

public class RegisterViewModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Password { get; set; }
}

この2つのViewModelを保持するViewModelをもう一つ作る必要があるのでしょうか?

public BigViewModel
{
    public LoginViewModel LoginViewModel{get; set;}
    public RegisterViewModel RegisterViewModel {get; set;}
}

バリデーション属性をビューに持ち込む必要があります。そのため、ViewModelsが必要です。

などの他の方法はないのでしょうか? BigViewModel ):

 @model ViewModel.RegisterViewModel
 @using (Html.BeginForm("Login", "Auth", FormMethod.Post))
 {
        @Html.TextBoxFor(model => model.Name)
        @Html.TextBoxFor(model => model.Email)
        @Html.PasswordFor(model => model.Password)
 }

 @model ViewModel.LoginViewModel
 @using (Html.BeginForm("Login", "Auth", FormMethod.Post))
 {
        @Html.TextBoxFor(model => model.Email)
        @Html.PasswordFor(model => model.Password)
 }

解決方法は?

いろいろな方法がありますが...

  1. BigViewModelで を実行します。

    @model BigViewModel    
    @using(Html.BeginForm()) {
        @Html.EditorFor(o => o.LoginViewModel.Email)
        ...
    }
    
    
  2. 2つのビューを追加で作成することができます。

    ログイン.cshtml

    @model ViewModel.LoginViewModel
    @using (Html.BeginForm("Login", "Auth", FormMethod.Post))
    {
        @Html.TextBoxFor(model => model.Email)
        @Html.PasswordFor(model => model.Password)
    }
    
    

    と register.cshtml 同じこと

    作成後、メインビューでレンダリングし、viewmodel/viewdataを渡す必要があります。

    ということで、こんな感じでしょうか。

    @{Html.RenderPartial("login", ViewBag.Login);}
    @{Html.RenderPartial("register", ViewBag.Register);}
    
    

    または

    @{Html.RenderPartial("login", Model.LoginViewModel)}
    @{Html.RenderPartial("register", Model.RegisterViewModel)}
    
    
  3. ajaxを使うことで、Webサイトの各パーツがより独立したものになります。

  4. iframes しかし、おそらくこのようなことはないでしょう