0

我正在使用这个例子来开发一个下拉列表。在我对视图中调用模型的方式进行一些更改之前,它运行良好。下拉列表模型类称为 dropdownModel。因为我的视图包含 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 模型,Averything 工作正常。

非常感谢任何帮助

编辑 视图的控制器:

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是空的,我很确定你没有在你的默认构造函数中实例化它BigModelClass()。当属性定义没问题时m => m.dropDownModel.State,它无法返回项目集合的实例:Model.dropDownModel.StateList

于 2012-12-03T18:16:26.557 回答
0

发生此问题是因为您没有将数据绑定到下拉列表。您必须将数据绑定到控制器操作中的下拉列表。如果您在控制器操作上绑定数据,请确保它也绑定在 [httppost] 控制器操作中,因为 modelstate.valid 为 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 回答