我正在使用this example来制作下拉列表。它运行良好,直到我在我的视图中调用模型的方式进行一些更改。 dropdownlist模型类称为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 =&gt; m.dropDownModel.State,new SelectList(Model.dropDownModel.StateList,“Value”,“Text”))
如果我只使用dropDownModel模型,那么一切正常。
非常感谢任何帮助
修改 视图的控制器:
public ActionResult Index(){
return View (new BigModelClass());
}
答案 0 :(得分: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();
}
}
或者,在您的控制器中,实例化dropdownmodel:
public ActionResult Index(){
return View (new BigModelClass {
dropDownModel = new DropDownModel()
});
}
答案 1 :(得分:1)
您的Model.dropDownModel
很可能为null,我很确定您不会在默认构造函数BigModelClass()
中实例化它。当属性定义m => m.dropDownModel.State
正常时,它无法返回项集合的实例:Model.dropDownModel.StateList
答案 2 :(得分: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的情况下将数据绑定到dropdownlist,那么你的问题就会消失。