2016-12-06 1 views
1

asp.net mvc에서 웹 페이지를 개발 중입니다. 동작에서 컨트롤러는 객체를 수신하고 객체의 값을 세션 항목에 저장 한 다음 객체를 다른 변수에 저장하는 메소드에 매개 변수로 전달하고 일부 유효성 검사 후에 변수의 값을 수정할 수 있습니다. 문제는 일단 변수의 값을 변경하면 어떤 이유로 세션 항목의 값도 변경되지 않는다는 것입니다.세션 데이터 항목의 값이 변경되는 이유는 무엇입니까?

세션 항목의 데이터가 왜 변경되는지, 그리고 변경하지 못하는 이유는 누구에게 알 수 있습니까? 여기

액션과 방법의 코드 :

<AllowAnonymous()> 
Function ListadoArticulos(ByVal filtroArticulos As Capturas.FiltrosArticulosAnuncios, Optional iPage As Integer = 1) As ActionResult 
    Dim filtroOriginal As Capturas.FiltrosArticulosAnuncios = CType(Me.Session.Item("filtroArtListaOriginal"), Capturas.FiltrosArticulosAnuncios) 
    Dim filtroLista As Capturas.FiltrosArticulosAnuncios = CType(Me.Session.Item("filtroArtLista"), Capturas.FiltrosArticulosAnuncios) 
    ViewBag.iIdTipoBien = 5 
    ViewBag.iValue = New SelectList(orderListItems, "iValue", "sDescripcionValue", filtroArticulosNew.iOrdenLista) 
    ViewBag.filtrosAplicados = Capturas.FiltrosArticulosAnuncios.DepurarFiltroAnuncioArticulo(filtroOriginal, filtroLista) 
    Return View(listaAnuncios.ToPagedList(iPage, 27)) 
End Function 


Public Shared Function DepurarFiltroAnuncioArticulo(ByVal filtroOriginal As  Capturas.FiltrosArticulosAnuncios, ByVal filtroAplicado As Capturas.FiltrosArticulosAnuncios) 
     Dim filtroResultado As New Capturas.FiltrosArticulosAnuncios 
     filtroResultado = filtroAplicado 

     'Evalúa el valor de cada propiedad del filtro y actualiza la propiedad en el caché 
     If filtroOriginal.iIdPais > 0 Then 
      filtroResultado.iIdPais = Nothing 
      filtroResultado.Pais = Nothing 
     End If 
     If filtroOriginal.iIdCategoria > 0 Then 
      filtroResultado.iIdCategoria = Nothing 
      filtroResultado.Categoria = Nothing 
     End If 
     If filtroOriginal.iIdTipoOperacion > 0 Then 
      filtroResultado.iIdTipoOperacion = Nothing 
      filtroResultado.TipoOperacion = Nothing 
     End If 
     If filtroOriginal.iIdUnidadPolitica > 0 Then 
      filtroResultado.iIdUnidadPolitica = Nothing 
      filtroResultado.UnidadPolitica = Nothing 
     End If 
     If filtroOriginal.lPrecioDesde > 0 Then 
      filtroResultado.lPrecioDesde = Nothing 
     End If 
     If Not IsNothing(filtroOriginal.sDescripcionArticulo) Then 
      filtroResultado.sDescripcionArticulo = Nothing 
     End If 
     Return (filtroResultado) 
    End Function 
End Class 

답변

1

때문에 어떻게 세션 지속성 작업과 객체 참조 작동합니다. 세션 래퍼에 객체를 저장하면 asp.net 파이프 라인의 끝에서 즉시 유지되지 않습니다. 세션 래퍼에 배치 할 때 객체에 대한 참조 만 전달합니다. 세션이 직렬화되기 시작할 때까지 객체는 이미 변경되었습니다. 복제 된 객체를 세션 래퍼에 넣는 것이 좋습니다. IClonable 인터페이스 구현 또는 Object.MemberwiseClone 메소드 사용

+0

감사! 그것이 답입니다. 방금 ICloneable Interfece를 구현했고, 객체의 사본을 작성하고 완료했습니다. 문제가 해결되었습니다. – Henry

관련 문제