Asp.net mvc 4 MVC模型实例化

Asp.net mvc 4 MVC模型实例化,asp.net-mvc-4,html.dropdownlistfor,asp.net-mvc-viewmodel,Asp.net Mvc 4,Html.dropdownlistfor,Asp.net Mvc Viewmodel,我没有掌握MVC模型的一些概念基础,我希望得到一些有用的澄清 在我的MVC 4 web应用程序中,我有一个视图模型,可以为DropDownList构建IEnumerable,如果我在视图中这样做: @model MyApp.Models.MyModel @Html.DropDownListFor(x => x.MyThingID, Model.MySelectList, "Select...") 我得到一个“对象引用未设置为对象实例”错误 但如果我这样做: @model MyApp.M

我没有掌握MVC模型的一些概念基础,我希望得到一些有用的澄清

在我的MVC 4 web应用程序中,我有一个视图模型,可以为DropDownList构建IEnumerable,如果我在视图中这样做:

@model MyApp.Models.MyModel

@Html.DropDownListFor(x => x.MyThingID, Model.MySelectList, "Select...")
我得到一个“对象引用未设置为对象实例”错误

但如果我这样做:

@model MyApp.Models.MyModel

@{ var myModel = new MyApp.Models.MyModel(); }
@Html.DropDownListFor(x => x.MyThingID, myModel.MySelectList, "Select...")
它起作用了。但是这个显式的实例化在我看来和感觉上都大错特错,我不确定我是否应该在控制器中执行任何操作,在这一点上,它只是一个简单的“returnview()”ActionResult


我找不到太多好的指导,最终我尝试实现一些级联下拉列表,所以我需要更好地了解它是如何工作的。如果您有时间和意愿提供帮助,我将不胜感激。

您应该将模型传递给视图。您可以在控制器代码中执行此操作:

return View(myModel);
而不是

return View(); // without the model!
其中yourmodel是MyApp.Models.MyModel的类型。只要初始化并传递它

public ActionResult YourAction()
{
    var myModel = new MyApp.Models.MyModel();
    // do other actions or put more data inside myModel
    return View(myModel);
}