0

この例を使用して、ドロップダウンリストを作成しています。ビュー内でモデルを呼び出す方法を変更するまでは、うまく機能します。ドロップダウンリストモデルクラスは、dropdownModelと呼ばれます。ビューには2つのモデルが含まれているため、2つのモデルを保持する「大きな」モデルクラスBigModelClassを作成しました。

大きなモデルはこんな感じ

public class BigModelClass {
   public DropDownModel dropDownModel { get; set; }
   public IEnumerable<projectname.Model.model2> var2 { get; set; }
}

私の見解では、モデルを次のように呼びます。

@model BigModel

私の見解では、次のようにドロップダウンリストを使用します。

@Html.LabelFor(m => m.dropDownModel.State)
@Html.DropDownListFor(m => m.dropDownModel.State,
                 new SelectList(Model.dropDownModel.StateList, "Value", "Text"))
<span class="required"></span>
@Html.ValidationMessageFor(m => m.dropDownModel.State)

残念ながら、次のエラーが発生します。

System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

ライン上

@ Html.DropDownListFor(m => m.dropDownModel.State、new SelectList(Model.dropDownModel.StateList、 "Value"、 "Text"))

dropDownModelモデルのみを使用すると、すべてが正常に機能します。

どんな助けでも大歓迎です

ビューのコントローラーを編集します。

public ActionResult Index(){
   return View (new BigModelClass());
}
4

3 に答える 3

2

その例からDropDownModelを直接コピーしたとすると、BigModelClassにコンストラクターを追加し、そこでdropDownModelをインスタンス化する必要があります。

public class BigModelClass {
   public DropDownModel dropDownModel { get; set; }
   public IEnumerable<projectname.Model.model2> var2 { get; set; }

   public BigModelClass() {
      dropDownModel = new DropDownModel();
   }
}

または、コントローラーで、ドロップダウンモデルをインスタンス化します。

public ActionResult Index(){
   return View (new BigModelClass {
         dropDownModel = new DropDownModel()
   });
}
于 2012-12-03T18:20:58.230 に答える
1

おそらくあなたModel.dropDownModelはnullです。デフォルトのコンストラクターでインスタンス化しないと確信していますBigModelClass()。また、プロパティ定義m => m.dropDownModel.Stateに問題がない場合は、アイテムコレクションのインスタンスを返すことができません。Model.dropDownModel.StateList

于 2012-12-03T18:16:26.557 に答える
0

この問題は、データをドロップダウンリストにバインドしなかったために発生します。コントローラアクションのドロップダウンリストにデータをバインドする必要があります。コントローラアクションでデータをバインドしている場合は、modelstate.validの[httppost]コントローラアクションでもデータがバインドされていることを確認してください。false。

    public ActionResult Register()
    {
        RegisterModel model = new RegisterModel();
        List<SequrityQuestion> AllSequrityQuestion = new List<SequrityQuestion>();
        model.SequrityQuestions = GetAllSequrityQuestion();

        return View(model);
    }

     [HttpPost]
    public ActionResult Register(RegisterModel model)
    {
        if (!ModelState.IsValid)
        {
            // there was a validation error =>
            // rebind categories and redisplay view

            model.SequrityQuestions = GetAllSequrityQuestion();
        }
        if (ModelState.IsValid)
        {
            // Your code to post
        }

        return View(model);
    }

上記の例では、SequrityQuestionsという名前のレジスタモデルにドロップダウンリストがあります。これがあなたがその問題に直面した理由だと思います。modelstate.valid falseの場合は、必ずデータをドロップダウンリストにバインドしてください。そうすれば、問題は解決します。

于 2012-12-03T18:24:40.620 に答える