从另一个控制器填充视图中的下拉列表

时间:2017-10-19 20:39:32

标签: model-view-controller drop-down-menu viewbag

我正在尝试从另一个Controller填充下拉列表。我的DeviceController有一个@ Html.DropDownList,它被填充。最初我有代码填充控制器中的DropDown。现在我试图将它移动到指定用于下拉菜单的控制器。所以我有代码在一个位置填充下拉列表而不是多个控制器中的相同代码。当我在原始控制器中将下拉列表正确加载时,下拉列表正确加载但是当我将它移动DropDown控制器时,我收到以下错误There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'DropDownDeviceType'.

我的观点代码 -

  @Html.DropDownList("DropDownDeviceType", null, htmlAttributes: new { @class = "form-control" })

从我的DropDownController(如果我在我的DeviceController中有这个代码,它按预期工作)

public void PopulateDevciceType(object selectDeviceType = null)
    {
        string voidInd = "N";
        var deviceType = db.DeviceTypes
            .Where(x => x.VoidInd == voidInd)
            .OrderBy(x => x.DeviceType1);

        //ViewData["DropDownDeviceType"] = new SelectList(deviceType, "DeviceTypeID", "DeviceType1", selectDeviceType);
        ViewBag.DropDownDeviceType = new SelectList(deviceType, "DeviceTypeID", "DeviceType1", selectDeviceType);

    }

在我的DeviceController中

 //Populate dropdowns
    DropDownController dropDown = new DropDownController();
    dropDown.PopulateDevciceType(model.DeviceTypeID);

1 个答案:

答案 0 :(得分:0)

我理解你希望将某些任务分配给专门的课程。但是,我认为你正在过度思考这一点。

我不能100%确定该错误实际上是根据您的代码告诉您的,但似乎您可能会获得一些不稳定的视图返回,因为您在不同的控制器中设置了ViewBag信息而不是返回视图的那个。我能正确理解它的一部分吗?

不是创建另一个控制器类,而是在处理列表创建的地方创建静态函数,而只创建列表创建。当它创建一个列表时,让它返回它。

然后,只要您需要填充列表,请在相关的控制器方法中执行此操作:

ViewBag.DropDownDeviceType= *wherever-your-static-method-is*.PopulateDeviceType(model.DeviceTypeID);