下拉列表导致错误

时间:2014-01-12 20:46:33

标签: c# asp.net-mvc razor drop-down-menu

我在MVC Html View中使用以下代码

@Html.DropDownListFor(m => m.Company,
                new SelectList(ViewBag.Companies, "Key", "Value", Model.Company))

我的控制器是这样的:

[HttpGet]
public ActionResult Login()
{
    ViewBag.Companies = (from a in _context.Companies 
                         select new {Key = a.Id, Value = a.Name});
    return View();
}

但显示以下错误:

  

对象引用未设置为对象的实例。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.NullReferenceException:不是对象引用   设置为对象的实例。

     

来源错误:

     

第30行:第31行:第32行:
  @ Html.DropDownListFor(m => m.Company,第33行:新   SelectList(ViewBag.Companies,“Key”,“Value”,Model.Company))第34行:

此代码用于登录屏幕,其中包含用户名,密码和公司下拉列表。

2 个答案:

答案 0 :(得分:1)

您在视图中引用了Model.Company。这将是null,因为它永远不会从控制器传递。

答案 1 :(得分:1)

首先,您应该在View中设置ViewModel,如下所示:

@model YourClassname

其次,你应该得到你的Company,当你返回你的视图时,你应该像这样传递你的项目:

[HttpGet]
public ActionResult Login()
{
    ViewBag.Companies = (from a in _context.Companies 
                     select new {Key = a.Id, Value = a.Name});
    // get your Company 
    var cmp = _context.Companies.First(); //for example

    return View(cmp);
}