Я пытаюсь выяснить, неправильно ли я понимаю что-то о ASP.NET MVC или обнаружил ли я какую-то ошибку в ASP.NET MVC Beta 3. У меня проблема с PartialView, когда он выбирает неправильную модель, когдас использованием расширений HTML Helper
Мой код контроллера выглядит следующим образом:
public ActionResult EditGeneral(MapGeneralViewModel vm)
{
var query = MapGeneralViewModel.ToModel(vm, svcMaps);
return PartialView("General", MapGeneralViewModel.FromModel(query));
}
В случае вставки свойство vm.Id начинается как -1 и после вызова MapGeneralViewModel.ToModel сохраняется база данных и запрос. Идентификатор имеет правильное значение.
Вызов MapSettingsViewModel.FromModel возвращаетМы с новой viewmodel проверили, что в правильном свойстве 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 с последующей передачей vm в представление
- с использованием <%: </strong> и <%= </strong>
- установка vm на ноль (старая модель представления каким-то образом все еще используется)
- изменение значения входящего идентификатора на 0 (в результате 0 становитсявывод в виде вместо -1)
- проблема не относится к свойствам, называемым "Id", я также проверил другие поля с тем же результатом
Я запуталсянад тем, как это должно работать, или я столкнулся с бета-ошибкой?Если это имеет какое-либо значение, это выполняется внутри моей локальной среды выполнения Azure на 64-разрядной машине Win7.