Ошибка в ASP.NET MVC SelectList. Значение Не может быть нулевым, имя параметра: элементы - PullRequest
4 голосов
/ 03 августа 2010

Эта строка вызывает у меня некоторые проблемы в приложении MVC, которое я разрабатываю

<%= Html.DropDownListFor(model => model.TypeID, new SelectList((IEnumerable)ViewData["TaskingTypes"], "TypeID", "TypeName"))%>

Вызывает ошибку в заголовке, когда два других обязательных поля в форме не заполнены. Когда поля заполнены, форма отправляется и записывается в БД, никаких проблем У кого-нибудь есть идеи, почему проверка не берется и не передается в представление?

TaskingTypes - это сущность, которая имеет отношение 1 ко многим с сущностью 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; }

}

Большое спасибо за поиск

1 Ответ

3 голосов
/ 03 августа 2010

Вам нужна следующая строка:

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

также в вашем методе публикации перед возвратом просмотра, если есть ошибка проверки .... Это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...