Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 会话数据项更改其值的原因?_Asp.net Mvc_Vb.net_Session - Fatal编程技术网

Asp.net mvc 会话数据项更改其值的原因?

Asp.net mvc 会话数据项更改其值的原因?,asp.net-mvc,vb.net,session,Asp.net Mvc,Vb.net,Session,我正在用asp.NETMVC开发一个网页。在一个动作中,控制器接收一个对象,它将该对象的值存储在会话的一个项中,然后将其作为参数传递给一个方法,该方法将该对象存储在另一个变量中,并且在一些验证之后可以修改该变量的值。我遇到的问题是,一旦方法更改了变量的值,由于我不知道的任何原因,会话项中的值也会更改 是否有人知道会话项中的数据为什么会更改,以及我如何获得不更改的数据 以下是操作和方法的代码: <AllowAnonymous()> Function ListadoArticulos(B

我正在用asp.NETMVC开发一个网页。在一个动作中,控制器接收一个对象,它将该对象的值存储在会话的一个项中,然后将其作为参数传递给一个方法,该方法将该对象存储在另一个变量中,并且在一些验证之后可以修改该变量的值。我遇到的问题是,一旦方法更改了变量的值,由于我不知道的任何原因,会话项中的值也会更改

是否有人知道会话项中的数据为什么会更改,以及我如何获得不更改的数据

以下是操作和方法的代码:

<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接口,我创建了对象的副本并完成了,问题解决了。