【问题标题】:Error in ASP.NET MVC SelectList. Value Cannot be null, parameter name: itemsASP.NET MVC 选择列表中的错误。值不能为空,参数名称:items
【发布时间】: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


    【解决方案1】:

    您需要以下行:

    ViewData["TaskingTypes"] = tt.GetAllTaskingTypes().ToList();
    

    如果出现验证错误,也可以在您返回视图之前在您的 post 方法中......这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多