Asp.net mvc 会话数据项更改其值的原因?
我正在用asp.NETMVC开发一个网页。在一个动作中,控制器接收一个对象,它将该对象的值存储在会话的一个项中,然后将其作为参数传递给一个方法,该方法将该对象存储在另一个变量中,并且在一些验证之后可以修改该变量的值。我遇到的问题是,一旦方法更改了变量的值,由于我不知道的任何原因,会话项中的值也会更改 是否有人知道会话项中的数据为什么会更改,以及我如何获得不更改的数据 以下是操作和方法的代码:Asp.net mvc 会话数据项更改其值的原因?,asp.net-mvc,vb.net,session,Asp.net Mvc,Vb.net,Session,我正在用asp.NETMVC开发一个网页。在一个动作中,控制器接收一个对象,它将该对象的值存储在会话的一个项中,然后将其作为参数传递给一个方法,该方法将该对象存储在另一个变量中,并且在一些验证之后可以修改该变量的值。我遇到的问题是,一旦方法更改了变量的值,由于我不知道的任何原因,会话项中的值也会更改 是否有人知道会话项中的数据为什么会更改,以及我如何获得不更改的数据 以下是操作和方法的代码: <AllowAnonymous()> Function ListadoArticulos(B
<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
函数ListadoArticulos(ByVal filterRoaticulos作为Capturas.filterArticulosanucios,可选iPage作为Integer=1)作为ActionResult
Dim filtroOriginal作为Capturas.Filtrosarticulosanucios=CType(Me.Session.Item(“FiltroatListOriginal”),Capturas.Filtrosarticulosanucios)
Dim filtroLista作为Capturas.FiltrosArticulosAnuncios=CType(Me.Session.Item(“FiltroAsista”),Capturas.FiltrosArticulosancios)
ViewBag.iIdTipoBien=5
ViewBag.iValue=新建选择列表(orderListItems,“iValue”,“sdescricopcionValue”,FilterRooticulosNew.iOrdenLista)
ViewBag.filtrosAplicados=Capturas.FILTROSATICULOSANUNCIOS.DEPURARFILTROANUNCIOATTICULO(filtroOriginal,filtroLista)
返回视图(ListaNuncios.ToPagedList(iPage,27))
端函数
公共共享功能DepurarFiltroAnutcio Articulo(ByVal Filtro最初作为Capturas.Filtrosarticulosancios,ByVal FiltroApplicato作为Capturas.Filtrosarticulosancios)
Dim FilterroResultado作为新的Capturas.Filtrosarticulosanucios
filtroResultado=FiltroApplicado
“腐败和腐败的代价和现实”
如果filterooriginal.iIdPais>0,则
filterResultado.iIdPais=无
filterResultado.Pais=无
如果结束
如果filterooriginal.iIdCategoria>0,则
filterResultado.iIdCategoria=无
filterResultado.Categoria=无
如果结束
如果filterooriginal.IIDTIPOPERACION>0,则
filtroResultado.IIDTIPOPERACION=无
filterResultado.TipoOperacion=无
如果结束
如果filterooriginal.iIdUnidadPolitica>0,则
filterResultado.iIdUnidadPolitica=无
filterResultado.UnidadPolitica=无
如果结束
如果filterooriginal.lpreciodede>0,则
filterResultado.lpreciodede=无
如果结束
如果不是Nothing(filterooriginal.sdescricipcionarticulo),则
filterResultado.sDescripcionArticulo=无
如果结束
返回(filtroResultado)
端函数
末级
这是因为会话持久性和对象引用是如何工作的。如果将对象放入会话包装器,它不会立即持久化,而是在asp.net管道的末尾。只有在将对象放入会话包装器时,才传递对该对象的引用。当它开始序列化会话时,对象已经更改。我建议将克隆对象放入会话包装器。实现接口或使用方法谢谢!这就是答案。我刚刚实现了iClonable接口,我创建了对象的副本并完成了,问题解决了。