как обрабатывать массив объектов в сеансе - PullRequest
3 голосов
/ 08 апреля 2010

В проекте, над которым я работаю, у меня есть список List<Item> с объектами, которые сохраняются в сеансе. Session.Add("SessionName", List);

В контроллере я создаю модель представления с данными этого сеанса

var arrayList = (List<Item>)Session["SessionName"];
var arrayListItems= new List<CartItem>();

foreach (var item in arrayList)
            {
                var listItem = new Item
                                   {
                                       Amount = item.Amount, 
                                       Variant= item.variant, 
                                       Id = item.Id
                                   };
                arrayListItems.Add(listItem);

            }

var viewModel = new DetailViewModel
            {
                itemList = arrayListItems
            }

и в моем представлении я делаю цикл по списку предметов и создаю форму, чтобы все они могли удалить предмет.

<table>
    <%foreach (var Item in Model.itemList) { %>
       <% using (Html.BeginForm()) { %>
           <tr>     
              <td><%=Html.Hidden(Settings.Prefix + ".VariantId", Item .Variant.Id)%>
              <td> <%=Html.TextBox(Settings.Prefix + ".Amount", Item.Amount)%></td>
              <td> <%=Html.Encode(Item.Amount)%> </td>
              <td> <input type="submit" value="Remove" /> </td>
           </tr>
      <% } %> 
    <% } %> 
</table>

Когда публикация с кнопки отправки происходит вручную, элемент удаляется из массива и отправляет обратно точно такую ​​же модель представления (с 1 элементом меньше в itemList).

return View("view.ascx", viewModel);

Когда сообщение обрабатывается и представление перезагружается, значения html.Hidden и Html.Textbox являются значениями удаленного элемента. Значение html.Encode является правильным значением. Когда я перезагружаю страницу, правильные значения находятся в полях. Оба раза я строю ViewModel точно так же.

Я не могу найти причину или решение этой ошибки. Я был бы очень рад любой помощи, чтобы решить эту проблему

Спасибо заранее за любые советы и помощь

1 Ответ

1 голос
/ 08 апреля 2010

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

Самый простой способ, который я нашел, чтобы обойти проблему, это просто опубликовать другой URL и перенаправить обратно.Вы также можете решить проблему, обработав запрос через AJAX.

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