如何';记住';插入新项后的组合选择(LINQ到SQL)?

如何';记住';插入新项后的组合选择(LINQ到SQL)?,sql,visual-studio-2010,linq,Sql,Visual Studio 2010,Linq,所以我在VS2010中使用ASP.NET LINQ to SQL网站模板。我的网站按预期运行,但我正在尝试进行一些有点超出我头脑的定制。用户最初会看到两个选项 部门|员工 根据他们的选择,他们会看到一个页面,可以在其中插入新项目(部门或员工)。这是我的问题 如果我单击Departments并选择Department_A,我会看到Department_A中的所有员工,我知道我正在查看Department_A,因为页面顶部的组合框显示了这一点。此时,我选择Insert New Item,保存我的新员

所以我在VS2010中使用ASP.NET LINQ to SQL网站模板。我的网站按预期运行,但我正在尝试进行一些有点超出我头脑的定制。用户最初会看到两个选项

部门|员工

根据他们的选择,他们会看到一个页面,可以在其中插入新项目(部门或员工)。这是我的问题

如果我单击Departments并选择Department_A,我会看到Department_A中的所有员工,我知道我正在查看Department_A,因为页面顶部的组合框显示了这一点。此时,我选择Insert New Item,保存我的新员工,然后我被带回“所有”部门,而不是回到我刚刚离开的部门A。我的目标是,如果某个人需要为同一个部门添加多个员工,则不必让他单击返回到该部门

有什么想法吗

解决方案: 下面是用于实现我的目标的代码,在Insert.aspx.vb中

Protected table As MetaTable

Public Shared Function getPassedVars() As String
    Dim oParams As String = ""
    Dim qString As String = ""
    Dim oSplit As New List(Of String)
    Try
        With HttpContext.Current
            qString = .Request.Url.Query
            If qString.Length > 0 Then 'do we have any passed variables?
                oSplit.AddRange(qString.Split("&"))
                    For i As Integer = 0 To oSplit.Count - 1
                        oParams &= String.Format("{0}{1}", oSplit.Item(i), IIf(i < oSplit.Count - 1, ";", ""))
                    Next
                    Return oParams
                Else
                    Return Nothing
                End If
        End With
    Catch ex As Exception
        Return Nothing
    End Try
End Function

Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
    table = DynamicDataRouteHandler.GetRequestMetaTable(Context)
    FormView1.SetMetaTable(table, table.GetColumnValuesFromRoute(Context))
    DetailsDataSource.EntityTypeName = table.EntityType.AssemblyQualifiedName
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Title = table.DisplayName
End Sub

Protected Sub FormView1_ItemCommand(ByVal sender As Object, ByVal e As FormViewCommandEventArgs)
    If e.CommandName = DataControlCommands.CancelCommandName Then
        Response.Redirect(table.ListActionPath + getPassedVars())
    End If
End Sub

Protected Sub FormView1_ItemInserted(ByVal sender As Object, ByVal e As FormViewInsertedEventArgs)
    If e.Exception Is Nothing OrElse e.ExceptionHandled Then
        Dim urlVars As String
        For Each s As String In Request.QueryString
            urlVars = "?" & (s & "=") + Request.QueryString(s)
        Next

        Response.Redirect(table.ListActionPath & urlVars)

    End If
End Sub
受保护的表作为元表
公共共享函数getPassedVars()作为字符串
Dim oParams As String=“”
Dim qString As String=“”
Dim oSplit作为新列表(字符串)
尝试
使用HttpContext.Current
qString=.Request.Url.Query
如果qString.Length>0,那么“我们是否有任何传递的变量?”?
oSplit.AddRange(qString.Split(“&”))
对于i,整数=0到oSplit.Count-1
oParams&=String.Format(“{0}{1}”,oSplit.Item(i),IIf(i受保护的子窗体View1\u ItemInserted(ByVal sender作为对象,ByVal e作为FormViewInsertedEventArgs)
如果e.Exception为Nothing或e.Exception已处理,则
作为字符串的Dim urlVars
对于Request.QueryString中的每个s作为字符串
urlVars=“?”&(s&“=”)+请求。查询字符串
下一个
Response.Redirect(table.ListActionPath和urlVars)
如果结束
端接头

结束类

如何使用会话跟踪您所在的位置,然后根据您想要使用的逻辑检查该会话

以下是我最后用来执行所需操作的内容

在Insert.aspx.vb中,我将此代码添加到FormView_ItemInserted子

    For Each s As String In Request.QueryString
           urlVars = "?" & (s & "=") + Request.QueryString(s)
    Next

    Response.Redirect(table.ListActionPath & urlVars)

听起来很相关。我不确定我是否完全理解如何实施它。我会再多读一些。谢谢你的建议。我认为它没有回到我更喜欢的Department_视图的原因是Department_A不是一个实际的表。员工就是表格,我相信部门只是一个过滤器?不,这听起来更像是后端代码中发生的事情。听起来好像表单处理程序正在进行响应。处理项目后,请重定向回主页面。受保护的子表单View1_ItemInserted(ByVal sender作为对象,ByVal e作为FormViewInsertedEventArgs)如果e.Exception为Nothing或e.ExceptionHandled则响应。重定向(table.ListActionPath)如果结束,则结束您需要更改“保存我的新员工”按钮的过程,或者创建另一个名为“添加另一名员工”的按钮并为此创建流程。忘记我所说的有点过火的会话。寻找一个具有按钮名称的Sub,然后从那里开始。是的,它正在做它应该做的事情。不过我更希望它重定向到最后一个视图。实际上,它是同一个视图,但使用DynamicFilter组合集to最初选择的部门。我如何更改它,使该组合在保存时不会更改为“全部”?