2010-04-08 6 views
3

내가 작업하고있는 프로젝트에서 세션에 저장된 객체가있는 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 
      } 

에서 내보기 I 루프의 데이터와 뷰 모델을 구축는 항목의 목록을 구유하고 제거 할 수 있도록 그들 모두를위한 양식을 만들 목. 제출 버튼에서 포스트 아이템 handeld된다

<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에) 정확히 같은 뷰 모델을 다시 배치한다. 게시물이 처리되고 뷰가 값 년대 html.Hidden 및 Html.Textbox의를 다시로드하면

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

는 값의 제거 된 항목이다. html.Encode의 값이 올바른 값입니다. 페이지를 다시로드하면 올바른 값이 필드에 나타납니다. 두 번 나는 정확히 같은 방식으로 viewModel을 빌드합니다.

이 오류의 원인 또는 해결 방법을 찾을 수 없습니다. 나는 어떤 조언을 위해 사전에이 문제를

고맙습니다를 해결하고 다시 동일한 URL에 게시되기 때문에이 문제가 발생

답변

1

수 있도록 도움이 매우 행복 할 것입니다. ASP.NET에는 양식 입력의 값이 동일한 URL로 다시 게시 될 때 보내지는 것과 동일한 브라우저로 항상 반환되도록하는 메커니즘이 내장되어 있습니다. 이것은 매우 성가신 행동 일 수 있지만 동의합니다. 그러나 어딘가에 대한 이론적 근거에 대한 오랜 논의가있을 수 있습니다. 처음에는 ASP.NET 유효성 검사 기능에서 자동 채우기가 동일한 값으로 중단되었습니다.

문제를 극복하기 가장 쉬운 방법은 다른 URL에 게시하고 다시 리디렉션하는 것입니다. AJAX를 통해 요청을 처리하여 문제를 해결할 수도 있습니다.

관련 문제