Я пытаюсь выяснить, не понимаю ли я что-то о ASP.NET MVC или обнаружил ли я какую-то ошибку в ASP.NET MVC Beta 3. У меня возникла проблема с PartialView подбирая неправильную модель при использовании HTML Helper расширенияASP.NET MVC 3 и расширения HTML-помощника
Мой контроллер код выглядит следующим образом:
public ActionResult EditGeneral(MapGeneralViewModel vm)
{
var query = MapGeneralViewModel.ToModel(vm, svcMaps);
return PartialView("General", MapGeneralViewModel.FromModel(query));
}
В случае это время вставки, свойство vm.Id начинается как -1 и после вызова MapGeneralViewModel.ToModel it была сохранена база данных и query.Id имеет правильное значение.
Звонок в MapSettingsViewModel.FromModel возвращает новую модель просмотра, и я проверил, что значение свойства Id содержит вновь созданное значение id.
Соответствующие биты зрения выглядеть следующим образом:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AdminWebRole.Models.Map.MapGeneralViewModel>" %>
<%: Model.Id %>
<%= Html.Hidden("IdTest", Model.Id) %>
<%= Html.HiddenFor(model => model.Id) %>
Если я ставлю точку останова в представлении, Model.Id правильно установлен на правильное значение.
Фактический выход контроллера (когда Model.Id == 70) выглядит следующим образом:
70
<input id="IdTest" name="IdTest" type="hidden" value="-1" />
<input id="Id" name="Id" type="hidden" value="-1" />
Таким образом, выходное значение без использования HTML-хелперы правильно, но вывод значений по помощники каким-то образом собирают обзорную модель, которая была передана в контроллер!
Я понятия не имею, как это происходит. Я пробовал различные вещи:
- Использование View(), а не PartialView()
- присваивающей результаты MapGeneralViewModel.FromModel() к ут и затем передавая виртуальную машину к вид
- с использованием <%: и <% =
- установка VM на нуль (старая модель представления как-то еще используется)
- изменения значения входящего идентификатора 0 (результатов в 0 выводимых в представлении вместо -1)
- проблема не специфична для свойств, называемых «Id», я также проверил другие поля с тем же результатом
Я запутался в том, как это должно работать, или я ударил бета-ошибку? Если это имеет какое-либо значение, это выполняется внутри локальной локальной среды Azure на 64-битной машине Win7.
Это, кажется, идет от ModelState. Чтение вокруг кажется, что я не должен использовать HTML Helpers для свойств на модели, которые изменились с момента публикации Tom Control. В этом случае это будет только свойство Id. Имеет ли это смысл ? – andynormancx
@andynormancx, да, ModelState жадные HtmlHelpers укусят всех, кому это кажется. – jfar
Кажется, это очень странный способ работать. – andynormancx