这一行在我正在开发的MVC应用程序中引起了一些问题
<%= Html.DropDownListFor(model => model.TypeID, new SelectList((IEnumerable)ViewData["TaskingTypes"], "TypeID", "TypeName"))%>
当未填写表单中的其他两个必填字段时,它会导致标题中的错误。填写字段时,表单将被提交并记录在数据库中,没有问题。任何人都有任何想法为什么没有选择验证并转移到视图?
'TaskingTypes'是与'Tasking'实体具有1对多关系的实体。 'Tasking'中的foriegn键是'TypeID'
堆栈跟踪的前2行是:
[ArgumentNullException: Value cannot be null.
[Parameter name: items]
System.Web.Mvc.MultiSelectList..ctor(IEnumerable items, String dataValueField, String dataTextField, IEnumerable selectedValues) +262322
System.Web.Mvc.SelectList..ctor(IEnumerable items, String dataValueField, String dataTextField) +31
这是控制器
[AcceptVerbs(HttpVerbs.Get),Authorize]
public ActionResult Create(){
Tasking tasking = new Tasking()
{
Created_On = DateTime.Now
};
ViewData["TaskingTypes"] = tt.GetAllTaskingTypes().ToList();
return View(tasking);
}
[AcceptVerbs(HttpVerbs.Post),Authorize]
public ActionResult Create(Tasking tasking)
{
if(TryUpdateModel(tasking)){
tasking.Created_On = DateTime.Now;
tasking.Created_By = User.Identity.Name;
taskingRepository.Add(tasking);
taskingRepository.Save();
return RedirectToAction("Details", new { id = tasking.TaskingID });
}
return View(tasking);
}
这是验证类
public class Tasking_Validation
{
[Required(ErrorMessage = "Please select a tasking type")]
public string TypeID { get; set; }
[Required(ErrorMessage = "Tasking Title is Required")]
[StringLength(255, ErrorMessage="Title cannot be longer than 255 characters")]
public string Title { get; set; }
[Required(ErrorMessage = "Location is Required")]
[StringLength(255, ErrorMessage = "Location cannot be longer than 50 characters")]
public string Location { get; set; }
}
非常感谢您寻找
答案 0 :(得分:3)
您需要以下一行:
ViewData["TaskingTypes"] = tt.GetAllTaskingTypes().ToList();
如果出现验证错误,在回复View之前,也在你的post方法中....这应该可以解决你的问题。