0

ログインして登録する2つの部分ビューを持つビューページを作成しました。両方について、以下のようにビューモデルと両方の結合モデルを作成しました。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace ProjectHub.ViewModels
{
    public class LoginModel
    {
         public string Username { get; set; }
         public string Password { get; set; }
    }
    public class RegisterModel
    {
         public string FullName { get; set; }
         public string Email { get; set; }
         //Some properties as well
    }
    public class LoginOrRegisterModel
    {
         public LoginModel Loginmodel { get; set; }
         public RegisterModel Registermodel { get; set; }
    }
}

Index.cshtml @model ProjectHub.ViewModels.LoginOrRegisterModel

 @Html.Partial("_Register", Model.Registermodel) 
 @Html.Partial("_Login",Model.Loginmodel)

_Login.cshtml

  @model ProjectHub.ViewModels.LoginModel

  @using (Html.BeginForm("Login", "account", FormMethod.Post))
  {
    @Html.ValidationSummary(true)
    <div class="label">@Html.Label("Username")</div>
    <div class="field">@Html.TextBoxFor(m => m.Username)</div>

    <div class="label">@Html.Label("Password")</div>
    <div class="field">@Html.PasswordFor(m => m.Password)</div>

    <input class="field" id="submit" type="submit" value="Login" />
}

_Register.cshtml

 @model ProjectHub.ViewModels.RegisterModel

 @using (Html.BeginForm("Register", "account", FormMethod.Post))
 {
    <div class="label">@Html.Label("Name")</div>
    <div class="field">@Html.TextBoxFor(m => m.FullName)</div>

    //Some other labels and fields

    <input class="field" id="submit" type="submit" value="Sign Up" />
    @Html.ValidationSummary()   
}

 public ActionResult Index()
    {
        return View();
    }

ここで、アプリケーションを実行しようとすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されました。@Html.Partial("_Register", Model.Registermodel) および @Html.Partial("_Login",Model.Loginmodel) の Index.cshtml 内。私を助けてください。

4

1 に答える 1

2

Modelこれらのパーシャルをレンダリングするメイン ビュー内でプロパティが nullのようです。このメイン ビューをレンダリングするコントローラー アクション内で、適切に初期化しLoginOrRegisterModelてビューに渡していることを確認します。

public ActionResult SomeAction()
{
    LoginOrRegisterModel model = new LoginOrRegisterModel();
    model.Loginmodel = new LoginModel();
    model.Registermodel = new RegisterModel();
    return View(model);
}
于 2013-02-23T17:08:09.767 に答える