ビュー内の複数のモデル 質問する

ビュー内の複数のモデル 質問する

1 つのビューに 2 つのモデルを表示したいです。ページにはLoginViewModelと の両方が含まれていますRegisterViewModel

例えば

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

検証属性をビューに渡す必要があります。そのために ViewModel が必要です。

次のような別の方法はありませんか ( なし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

方法はいろいろあります...

  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も同じです

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

    つまり次のようになります:

    @{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しかし、おそらくそうではないだろう

おすすめ記事