【问题标题】:Access data from Viewbag Dropdown从 Viewbag Dropdown 访问数据
【发布时间】:2019-05-19 20:40:13
【问题描述】:

我从下拉列表中获取值到控制器,但是当它返回查看时返回 Null 屏幕截图:-

控制器屏幕截图:-

public ActionResult Index(int departmentID)
{
     ViewBag.dropdowndetail = null;
 
    var strDDLValue = departmentID;
    if (strDDLValue == null)
    {
        return HttpNotFound();
    }
    else
    {
        var emp = db.employees.ToList().FirstOrDefault(x=>x.depId==departmentID);
        return View(emp);
    }
}

错误:

【问题讨论】:

  • 更具描述性
  • 从下拉列表中我只想显示那些我通过下拉列表选择 ID 的员工的数据简而言之我想通过下拉列表搜索
  • @KhizarNayyar 你的意思是当你POST表单数据然后返回到View时,下拉数据是null?如果是这样,这是因为在返回视图之前,您还需要在 POST 操作上填充 ViewBag.dropdowndetail。 ViewBag 仅持续当前请求。
  • 你的意思是在 Post Index 方法中我也应该使用 ViewBag.dropdowndetail?
  • @KhizarNayyar 是的,如果您打算在该控制器方法的视图中再次使用它,您还需要在其中填充它。当您POST 表单时,ViewBag 将为空

标签: asp.net-mvc model-view-controller dropdown viewbag


【解决方案1】:

我猜对了 我的 viewbag 在 Post 方法中没有得到任何值,所以为什么在 View 中它得到 null 异常 我在 Post 方法中调用我的 viewbag 并给它赋值。 用这个改变下面的代码。

 public ActionResult Index(int departmentID)
    {         
        var strDDLValue = departmentID;
        if (strDDLValue == null)
        {
            return HttpNotFound();
        }
        else
        {
            var emp = db.employees.Where(x=>x.depId==departmentID).ToList();
            ViewBag.dropdowndetail = db.departments.Distinct().ToList();
            return View(emp);
        }

    }

【讨论】:

    【解决方案2】:

    您可以在控制器中使用键值方法

    ViewBag.dropdowndetail = db.departments.Distinct().Select(x => new KeyValuePair<int, string>(x.depid, x.DepartmentName));
    

    在 View 中像这样使用 ViewBag

     @Html.DropDownListFor(model => model.depid, new SelectList((IEnumerable<KeyValuePair<int, string>>)ViewBag.dropdowndetail , "key", "value"), "--Select Departments--")
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2013-12-30
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多