使用DropdownlistFor helper获取名称列表

时间:2013-09-17 14:15:35

标签: c# asp.net-mvc nullreferenceexception

我知道提出这个问题很愚蠢,但我无法理解,我需要你的帮助。

首先,我是MVC的新手。在我的项目中,我使用dropdownlistFor帮助程序显示特定Id可用的名称列表。我这样做了,它显示了id的名称。

现在,在发布表单时,我会在下拉列表中使用属性获取Null引用异常。

这是我在模型中的属性,它是一个名称列表。

在我的[HttpGet]控制器中,我做了这个调用函数并返回该Id的名称列表。

现在,在加载表单时,名称列表正在显示。我的观点是

当我提交表单时,我得到一个空引用异常,因为在新的SelectList(Model.InterviewerName)中,Model是NULL。

有没有让我摆脱这个问题。

2 个答案:

答案 0 :(得分:1)

我认为你应该像这样更新你的viewmodel

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操作方法中,如果要将viewmodel返回到视图,则需要重新填充下拉内容,因为HTTP是无状态的,并且它不会在请求之间保留下拉内容(Webforms这是使用Viewstate,在MVC我们没有那个)

答案 1 :(得分:0)

我想我发现了这个问题,你需要做以下两件事来解决,

1)将模型属性public IList<string> InterviewerName更改为public string InterviewerName

2)使用ViewBag将选择列表值带到View。

如果有帮助,请告诉我。