从另一个控制器填充视图中的下拉列表
Populate Dropdown in View from another 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);
我理解您希望将某些任务外包给专门的 classes。不过,我觉得你有点想多了。
我不是 100% 确定这个错误实际上告诉了你什么代码,但看起来你可能有一些不稳定的视图 returns 因为你在其中设置了 ViewBag 信息一个不同于 return 视图的控制器。我对那部分的理解正确吗?
与其创建另一个控制器 class,不如在某处创建一个静态函数来处理列表创建并且仅处理列表创建。当它创建一个列表时,让它return它。
然后,每当您需要填充列表时,在相关的控制器方法中执行此操作:
ViewBag.DropDownDeviceType= *wherever-your-static-method-is*.PopulateDeviceType(model.DeviceTypeID);
我正在尝试从另一个控制器填充下拉菜单。我的 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);
我理解您希望将某些任务外包给专门的 classes。不过,我觉得你有点想多了。
我不是 100% 确定这个错误实际上告诉了你什么代码,但看起来你可能有一些不稳定的视图 returns 因为你在其中设置了 ViewBag 信息一个不同于 return 视图的控制器。我对那部分的理解正确吗?
与其创建另一个控制器 class,不如在某处创建一个静态函数来处理列表创建并且仅处理列表创建。当它创建一个列表时,让它return它。
然后,每当您需要填充列表时,在相关的控制器方法中执行此操作:
ViewBag.DropDownDeviceType= *wherever-your-static-method-is*.PopulateDeviceType(model.DeviceTypeID);