2016-12-06 44 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

相關問題