Ошибка скаффолдинга MVC: «Значение не может быть нулевым. Имя параметра: источник» - PullRequest
5 голосов
/ 06 июня 2011

Я следовал инструкции в этом сообщении , но когда я пытаюсь добавить продукт, я получаю эту ошибку:

Server Error in '/' Application.
--------------------------------------------------------------------------------

Value cannot be null.
Parameter name: source 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: source

Source Error: 


Line 63: </div>
Line 64: <div class="editor-field">
Line 65:     @Html.DropDownListFor(model => model.CategoryId, ((IEnumerable<GAM.Models.Category>)ViewBag.PossibleCategories).Select(option => new SelectListItem {
Line 66:         Text = (option == null ? "None" : option.Name), 
Line 67:         Value = option.Id.ToString(),

Код контроллера:

public ActionResult Create()
{
    ViewBag.PossibleCategory = context.Categories;
    return View();
} 

//
// POST: /Product/Create

[HttpPost]
public ActionResult Create(Product product)
{
    if (ModelState.IsValid)
    {
        context.Products.Add(product);
        context.SaveChanges();
        return RedirectToAction("Index");  
    }

    ViewBag.PossibleCategory = context.Categories;
    return View(product);
}

И код вида:

 @Html.DropDownListFor(model => model.CategoryId, ((IEnumerable<GAM.Models.Category>)ViewBag.PossibleCategories).Select(option => new SelectListItem {
    Text = (option == null ? "None" : option.Name), 
    Value = option.Id.ToString(),
    Selected = (Model != null) && (option.Id == Model.CategoryId)
}), "Choose...")
@Html.ValidationMessageFor(model => model.CategoryId)

1 Ответ

11 голосов
/ 06 июня 2011

Ваша проблема заключается в следующем:

Вы назначаете это свойство в пределах Controller:

ViewBag.PossibleCategory = context.Categories;

Затем в вашем View вы пытаетесь прочитать это динамическое ViewBag свойство:

ViewBag.PossibleCategories

Вы видите ошибку? Вы даете разные имена ... Вы не получаете проверку времени компиляции, потому что ViewBag использует новый тип C # 4 dynamic . ViewBag.PossibleCategories будет разрешено только во время выполнения. Поскольку нет свойства ViewBag, которое соответствует ViewBag.PossibleCategories, вы получите эту ошибку: Value cannot be null. Parameter name: source

Чтобы решить эту проблему, просто сделайте это:

ViewBag.PossibleCategories = context.Categories;
...