ASP.NET MVC 3 и HTML Helper Extensions - PullRequest
       7

ASP.NET MVC 3 и HTML Helper Extensions

2 голосов
/ 22 октября 2010

Я пытаюсь выяснить, неправильно ли я понимаю что-то о 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.

Ответы [ 2 ]

1 голос
/ 12 апреля 2013

Я только что столкнулся с подобной проблемой в частичном представлении, которое я использую для отображения товаров в заказе.

Я использовал следующее для рендеринга скрытого ввода.

@Html.Hidden("salesorderlineid", orderLine.SalesOrderLineID)

Это работает нормально, пока я не удалю элемент, когда используется идентификатор неправильного (удаленного) элемента. Я дважды проверил модель, она была правильной и правильно отображалась в других случаях в том же виде.

Я закодировал скрытый ввод непосредственно как html, и он отлично работает - возможно, это похоже на ошибку MVC3?

<input type="hidden" name="salesorderlineid" value="@orderLine.SalesOrderLineID"/>

1 голос
/ 22 октября 2010

Невозможно, чтобы MVC просто выбирал переменную, которую вы явно не передали в свое представление или зависали в Session или TempData.

Поскольку вы устанавливаете этот Id на -1, я начинаю там из-за проблем.

Другая возможность заключается в том, что -1 где-то висит в вашем ModelState.Помощники HTML сначала обращаются к ModelState, прежде чем принять решение об использовании любых передаваемых вами значений.

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