MVC 3 Framework Проблемы с редактированием и детализацией - PullRequest
1 голос
/ 31 марта 2012

История вопроса и проблема

Я успешно создал базу данных, модели из базы данных и контроллеры, которые создали страницы по умолчанию.Текущая проблема, с которой я сталкиваюсь, - это редактирование и удаление страниц, они постоянно вызывают проблемы и пытались

  1. удалить контексты и прочитать
  2. удалить модели и все и заново добавить

Заявление о проблеме, которое появляется при нажатии на страницы редактирования / удаления со страницы сведений:

Ошибка сервера в приложении '/'.

Параметрысловарь содержит пустую запись для параметра 'id' ненулевого типа 'System.Int32' для метода 'System.Web.Mvc.ActionResult Edit (Int32)' в 'Olympics2012.Controllers.AthleteController'.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.ArgumentException: словарь параметров содержит пустую запись для параметра 'id' с ненулевым типом 'System.Int32' для метода 'System.Web.Mvc.ActionResult Edit (Int32)'в «Олимпиада2012.Контроллеры. АтлетКонтроллер».Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

Код редактирования контроллера

    public ActionResult Edit(int? id)
    {

        Athlete athlete = db.Athletes.Find(id);
        return View(athlete);
    }

    [HttpPost]
    public ActionResult Edit(Athlete athlete)
    {
        if (ModelState.IsValid)
        {
            db.Entry(athlete).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(athlete);
    }

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Привет, попробуйте передать значение int в метод Find:

public ActionResult Edit(int? id)
{
    if (id.HasValue) 
    {
        Athlete athlete = db.Athletes.Find(id.Value);
        return View(athlete);
    }

    // A null-value has been passed
    return RedirectToAction("Index");
}

И второе: ваши ссылки редактирования содержат идентификатор элемента, который нужно отредактировать?

Например: http://[site_name]/[controller_name]/Edit/[id]

Если вы не указали идентификатор, вы должны сделать что-то вроде этого (в файле SomeView.schtml, если вы используете движок Razor):

//...
@foreach(var item in [elements_container].Elements)
{
    //...
    @Html.ActionLink("Edit", "Edit", new { id = item.Id })
    //...
}
//...
0 голосов
/ 31 марта 2012

Попробуйте изменить метод редактирования на:

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