1.lstInhibit是一个集合,其类是Animal。是个经过条件筛选之后的集合。当选择下拉项时,要从该集合选取一个项
2.animal.Inhibit是Animal是类的一个字段
现在有个问题:animal.Inhibit中的可能项不在lstInhibit集合中,导致绑定的值显示不正确,该如何做这个需求呢?
@Html.DropDownList("hibit",new SelectList(lstInhibit,"hibit","Name",animal.Inhibit))
在 ASP.NET MVC 中处理这个需求,您可以考虑使用视图模型(ViewModel)来处理数据绑定和显示。以下是一种可能的方法:
创建视图模型:首先,创建一个视图模型,该视图模型包含一个字段,用于表示用户选择的项,以及一个字段,用于表示从 lstInhibit 中选择的项。例如
public class AnimalViewModel
{
public int SelectedInhibitId { get; set; }
public List<SelectListItem> AvailableInhibits { get; set; }
}
填充视图模型:在控制器中,将 lstInhibit 集合中的可用项填充到视图模型的 AvailableInhibits 属性中。这将作为下拉列表的选项
public ActionResult YourAction()
{
var lstInhibit = GetFilteredInhibitList(); // 获取经过条件筛选的集合
var viewModel = new AnimalViewModel
{
AvailableInhibits = lstInhibit
.Select(item => new SelectListItem
{
Value = item.InhibitId.ToString(),
Text = item.InhibitName
})
.ToList()
};
return View(viewModel);
}
在视图中绑定下拉列表:在视图中,使用 Html.DropDownListFor 辅助方法来呈现下拉列表,并绑定到视图模型的 SelectedInhibitId 字段
@model YourNamespace.AnimalViewModel
@Html.DropDownListFor(model => model.SelectedInhibitId, Model.AvailableInhibits, "请选择一个项")
在控制器中处理选择:在提交表单时,您可以从视图模型中的 SelectedInhibitId 属性获取用户选择的值,然后使用它来查找匹配的 lstInhibit 中的项。
[HttpPost]
public ActionResult YourAction(AnimalViewModel viewModel)
{
if (ModelState.IsValid)
{
int selectedInhibitId = viewModel.SelectedInhibitId;
// 根据 selectedInhibitId 查找匹配的 lstInhibit 中的项并处理它
// 其他操作...
}
// 如果提交不成功,返回视图
return View(viewModel);
}
调试下,lstInhibit 的内容是什么