【发布时间】:2011-03-24 15:46:36
【问题描述】:
这一行在我正在开发的 MVC 应用程序中引起了一些问题
<%= Html.DropDownListFor(model => model.TypeID, new SelectList((IEnumerable)ViewData["TaskingTypes"], "TypeID", "TypeName"))%>
表单中其他两个必填字段未填写时会导致标题错误。填写完字段后,表单提交并记录在db中,没有问题。任何人都知道为什么验证没有被提取并转移到视图中?
“TaskingTypes”是一个与“Tasking”实体具有一对多关系的实体。 'Tasking' 中的外键是 '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; }
}
非常感谢您的关注
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-mvc-2