【发布时间】:2021-03-06 17:16:09
【问题描述】:
我正在构建一个视图,它将根据两个下拉列表中的选择显示表格数据,第一个选择部门是从数据库中填充的。第二个是“年”的静态下拉列表,我还没有。有类似问题的答案,但我已经看过它们并尝试了所有方法。我已经到了在为下拉列表创建标记的视图中出现空异常的地步。
查看:
Departments 返回为 null。我是 MVC 的新手,并从在线 examples 拼凑起来。我猜我的模型是错误的。
@model IEnumerable<BudgetDemo.Models.BudgetsActualsViewModel>
@foreach (var item in Model)
{
@Html.DropDownListFor(m => item.Departments,
new SelectList(item.Departments.Select(x => x.Text)))
}
视图模型:
public class BudgetsActualsViewModel
{
[Display(Name = "Cost Center/Department")]
[Required(ErrorMessage = "Cost Center/Department is required.")]
[StringLength(62)]
public string SelectedDepartment { get; set; }
public IEnumerable<SelectListItem> Departments { get; set; }
}
控制器:
public ActionResult GetBudgetsActuals()
{
repo = new BudgetDemoRepository();
ModelState.Clear();
return View(repo.GetBudgetsActuals());
}
存储库类:
public List<BudgetsActualsViewModel> GetBudgetsActuals()
{
...
List<BudgetsActualsViewModel> budgetsActualsList = new List<BudgetsActualsViewModel>();
// Query returning correct data from DB here
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
budgetsActualsList.Add(
new BudgetsActualsViewModel
{
SelectedDepartment = ds.Tables[0].Rows[i]["Department"].ToString()
}
);
}
return budgetsActualsList;
}
【问题讨论】:
-
您是否尝试过复制另一个列表中的值,而不是传递该方法返回的列表?
-
@JamshaidKamran,不,因为老实说,我不明白为什么我的下拉菜单有两个属性(我从链接的示例中复制了它)并且在我尝试时得到了一个 IEnumerable 强制转换异常。
-
好的,很清楚。您将值保存在
SelectedDepartment中,并访问显然为空的另一个属性。 -
您的
BudgetsActualsViewModel类将Departments定义为类型IEnumerable<SelectListItem>,而您的存储库返回类型List<BudgetsActualsViewModel>用于方法GetBudgetsActuals() -
@JamshaidKamran,同意。但我需要一个代码示例作为答案。谢谢。
标签: c# asp.net asp.net-mvc model-view-controller asp.net-mvc-5