Параметры не передаются, когда ModelState недопустим - PullRequest
1 голос
/ 11 марта 2012

Мне трудно понять, что происходит, когда ModelState недействителен (EF4.1, сначала база данных).

Следующий код показывает создание задачи для проекта.

Всякий раз, когдамодель действительна, все в порядке, но когда модель недействительна, я получил исключение, что в модель не был передан ни один параметр (однако маршрут правильный и все должно быть в порядке).Что я делаю не так?

 //
    // POST: /Task/Create
    [Authorize()]
    [HttpPost]
    public ActionResult Create(int projectId, CPIO_Tasks task)
    {
        ViewBag.projId = projectId;

        try
        {            
            task.t_p_id = projectId;
            if (ModelState.IsValid)
            {

                db.CPIO_Tasks.AddObject(task);
                db.SaveChanges();
                return RedirectToAction("Details", "Projects", new { id = task.t_p_id });
            }

        }
        catch (DataException ex)
        {
            ModelState.AddModelError("Nieudane dodanie:", ex.ToString());
        }
        return RedirectToAction("Create", "Task", new {id = projectId});
    }

Словарь параметров содержит пустую запись для параметра 'projectId' с ненулевым типом 'System.Int32' для метода 'System.Web.Mvc.ActionResultСоздать (Int32) 'в' CPIO_WebUI.Controllers.TaskController '.Необязательный параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как необязательный параметр.Имя параметра: параметры

Путь с идентификатором перенаправления правильный: localhost: 11314 / Task / Create / 2.

Заранее благодарен за любую помощь

Анна

Ответы [ 2 ]

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

Я подозреваю, что ошибка модели на самом деле происходит от вашего действия GET, а не от вашего действия POST. Как правило, вы не будете перенаправлять, когда у вас есть ошибка модели, вы просто вернете то же представление с ошибками модели без изменений, обновляя модель по мере необходимости. Не видя вашего действия GET, трудно сказать, но попробуйте заменить перенаправление в конце на результат просмотра подходящей моделью и посмотрите, не работает ли он для вас.

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

Как говорится в сообщении об ошибке, чтобы вы не передавали projectId своему методу, вам нужно сделать так, чтобы ваш метод выглядел следующим образом:

public ActionResult Create(int? projectId, CPIO_Tasks task)
{
    // .....
}

Для этого нужно использовать Nullable<int> для параметра, принимающего тип значения (который не допускает null) и делающего его ссылочным типом для разрешения null.Таким образом, вы можете передать значение null, не сталкиваясь с этим исключением.

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