使用下拉列表帮助程序获取名称列表

本文关键字:列表 获取 帮助程序 下拉列表 | 更新日期: 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 将选择列表值带到视图。

让我知道它是否有帮助。