Ошибка привязки модели ASP.Net MVC3 - PullRequest
7 голосов
/ 21 апреля 2011

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

Приложение должно быть развернуто как виртуальная папка в IIS, чтобы вместо / Home / Test URL был /Virtual/Home/Test.

Домашний контроллер:

[HttpGet]
public ActionResult Test(int? temp, bool? testBool)
{
    return View(testBool);
}

/ Home / Тестовый просмотр (Razor cshtml):

@model bool?
@{
    ViewBag.Title = "Test";
}

@using (Html.BeginForm("Test", "Home", FormMethod.Get))
{
    @Html.CheckBox("testBool", Model ?? false, new { onchange = "this.form.submit();" })
    @Html.Label(Model == true ? "True" : "False")
}

На пост обратно бул? не доходит до контроллера из-за int? перед этим в списке параметров. Это можно решить, поставив bool? до инт? в списке параметров, но, очевидно, вам не нужно этого делать. Он также отлично работает, если не в виртуальной папке на IIS. Та же проблема существует, если использовать метод POST тоже, хотя отправка bool, а не bool? работает, но не является необходимым, если не находится в виртуальной папке, поэтому делать это тоже не нужно.

Кто-нибудь еще сталкивался с этим, и есть ли что-то, что объясняет, почему привязка не срабатывает или это просто ошибка в MVC3?

Если это просто ошибка, кто-нибудь знает, каковы надлежащие каналы ASP.Net MVC для отправки отчетов об ошибках?

Обновление:

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

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Эта статья может быть вам полезна.

1 голос
/ 05 мая 2011

Видимо, это все еще проблема. Думал, что это уже исправлено. Одним из способов решения этой конкретной ошибки является добавление этого в ваш метод Application_Start.

ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();

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

Разница между необязательными параметрами маршрута в статье haacked заключается в том, что в вашем примере маршрутизация не является проблемой. В этом случае вы публикуете (или строку запроса) данные, и это не заполняет правильно ваши параметры действий, допускающие значение NULL. Я проверил источник mvc3 и не понимаю, почему это должно быть проблемой, так как отладка, похоже, работает правильно, и пошаговое выполнение исходного кода приводит к ожидаемому поведению. Я вполне уверен, что это не было исправлено, хотя Скотт Гатри сказал, что это должно быть уже сейчас ...

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