我知道提出这个问题很愚蠢,但我无法理解,我需要你的帮助。
首先,我是MVC的新手。在我的项目中,我使用dropdownlistFor帮助程序显示特定Id可用的名称列表。我这样做了,它显示了id的名称。
现在,在发布表单时,我会在下拉列表中使用属性获取Null引用异常。
这是我在模型中的属性,它是一个名称列表。
在我的[HttpGet]控制器中,我做了这个调用函数并返回该Id的名称列表。
现在,在加载表单时,名称列表正在显示。我的观点是
当我提交表单时,我得到一个空引用异常,因为在新的SelectList(Model.InterviewerName)中,Model是NULL。
有没有让我摆脱这个问题。
答案 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。
如果有帮助,请告诉我。