使用下拉列表帮助程序获取名称列表
本文关键字:列表 获取 帮助程序 下拉列表 | 更新日期: 2023-09-27 18:31:42
我知道问这个问题很愚蠢,但我无法弄清楚,我需要你们的帮助。
首先,我是MVC的新手。在我的项目中,我正在使用下拉列表用于帮助程序来显示可用于特定 ID 的名称列表。我这样做了,它正在显示 id 的名称。
现在,在发布表单时,我收到下拉列表中使用的属性的空引用异常。
这是我在模型中的属性,它是一个名称列表。
在 [HttpGet] 的控制器中,我这样做了,它调用了一个函数并返回该 ID 的名称列表。
现在,在表单加载时正在分发名称列表。我的观点是
当我提交表单时,我收到一个空引用异常,因为在新的选择列表(Model.InterviewerName)中,模型为空。
无论如何可以让我摆脱这个问题。
我认为你应该像这样更新你的视图模型:
public class InterviewViewModel
{
public List<SelectListItem> Interviewers { set;get;}
public int SelectedInterviewerID { set;get;}
//Other properties relevant to the view as needed
}
在 GET 操作中设置 Interviewers
集合属性:
public ActionResult Interview()
{
var vm=new InterviewViewModel();
vm.Interviewers =GetInterViewrsFromSomewhere();
return View(vm);
}
public List<SelectListItem> GetInterViewrsFromSomewhere()
{
var list=new List<SelectListItem>();
//Items hard coded for demo. you can read from your db and fill here
list.Add(new SelectListItem { Value="1", Text="AA"});
list.Add(new SelectListItem { Value="2", Text="BB"});
return list;
}
在您看来,哪个是强类型InterviewViewModel
@model InterviewViewModel
@using(Html.Beginform())
{
<p>Select interviewer :
@Html.DropdownlistFor(x=>x.SelectedInterviewerID,Model.Interviewers,"Select")
<input type="submit" />
}
因此,当发布表单时,所选面试官 ID 将在SelectedInterviewerID
属性中可用:
[HttpPost]
public ActionResult Interview(InterviewViewModel model)
{
if(ModelState.IsValid)
{
//check for model.SelectedIntervieweID value
//to do :Save and redirect
}
//Reload the dropdown data again before returning to view
vm.Interviewers=GetInterViewrsFromSomewhere();
return View(vm);
}
在 HttpPost 操作方法中,如果要将视图模型返回到视图,则需要重新填充下拉列表内容,因为 HTTP 是无状态的,它不会在请求之间保留下拉内容(Webforms 使用 Viewstate 执行此操作,而在 MVC 中我们没有)。
我想
我发现了问题,你需要做以下两件事来解决,
1) 将模型属性public IList<string> InterviewerName
更改为public string InterviewerName
2) 使用 ViewBag 将选择列表值带到视图。
让我知道它是否有帮助。