【问题标题】:Dropdown List Causing Error下拉列表导致错误
【发布时间】:2014-01-12 20:46:32
【问题描述】:

我在 MVC Html 视图中使用以下代码

@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 行:

此代码用于登录屏幕,其中包含公司的用户名、密码和下拉菜单。

【问题讨论】:

  • 您认为@model 是什么?在您的控制器操作中,您需要将一个实例传递给View(),例如:return View(new YourModel());...
  • 但它适用于例如显示基于模型的文本框?只是没有下拉菜单?
  • 它不起作用,因为您正在访问助手中的 Model.Company 并且您的 Model 为空。写@Html.DropDownListFor(m => m.Company, new SelectList(ViewBag.Companies, "Key", "Value"))

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


【解决方案1】:

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

【讨论】:

  • 我理解,但它用于创建场景,因此没有任何价值。
    @Html.LabelFor(model => model.Password)
    @Html.EditorFor(model => model.Password) @Html .ValidationMessageFor(model => model.Password)
  • 上面的代码工作正常。所以我不明白为什么下拉菜单没有
  • 区别在于 Html。"Control"对于可能解释模型为空的解释器并显示控件。 new SelectList(ViewBag.Companies, "Key", "Value", Model.Company) 没有仔细检查到该级别并在 Model.Company 上引发异常。模型为空!
【解决方案2】:

首先你应该像这样在你的视图中设置你的 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);
}

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2013-03-24
    • 2013-05-22
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 2014-04-22
    • 2010-12-26
    相关资源
    最近更新 更多