ASP.NET MVC SelectList中的错误。值不能为null,参数名称:items

时间:2010-08-03 10:15:20

标签: c# .net asp.net-mvc asp.net-mvc-2

这一行在我正在开发的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; }

}

非常感谢您寻找

1 个答案:

答案 0 :(得分:3)

您需要以下一行:

ViewData["TaskingTypes"] = tt.GetAllTaskingTypes().ToList();
如果出现验证错误,在回复View之前,

也在你的post方法中....这应该可以解决你的问题。