【问题标题】:How to 'remember' combo selection after inserting new Item (LINQ to SQL)?插入新项目(LINQ to SQL)后如何“记住”组合选择?
【发布时间】:2013-07-04 03:12:40
【问题描述】:

所以我在 VS 2010 中使用 ASP.NET LINQ to SQL 网站模板。我的网站按预期运行,但我正在尝试进行一些超出我想象的自定义。最初为用户提供了两个选择...

部门 |员工

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

如果我单击部门并选择部门_A,我会看到部门_A 中的所有员工,并且我知道我正在查看部门_A,因为页面顶部的组合框显示了这一点。此时我选择插入新项目,保存我的新员工,然后我被带回“所有”部门,而不是回到我刚刚离开的 Department_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

结束类

【问题讨论】:

    标签: sql visual-studio-2010 linq


    【解决方案1】:

    如果使用 Session 来跟踪您所在的位置,然后根据您要使用的逻辑检查该 Session,会怎样? http://wiki.asp.net/page.aspx/57/

    【讨论】:

    • 听起来很相关。不确定我是否完全理解如何实现它。我会做更多的阅读。谢谢你的建议。我认为它没有回到我更喜欢的 Department_A 视图的原因是因为 Department_A 不是一个实际的表。员工就是桌子,我相信部门在这一点上只是一个过滤器?
    • 没有。这听起来更像是您的后端代码中发生的事情。听起来表单处理器正在执行响应。处理项目后重定向回主页。
    • Protected Sub FormView1_ItemInserted(ByVal sender As Object, ByVal e As FormViewInsertedEventArgs) If e.Exception is Nothing orElse e.ExceptionHandled Then Response.Redirect(table.ListActionPath) End If End Sub
    • 您要么需要更改“保存我的新员工”按钮的流程,要么创建一个名为“添加其他员工”的不同按钮并为此创建流程。忘记我所说的关于 Sessions 的内容有点矫枉过正。查找具有您的按钮名称的 Sub 并从那里开始。
    • 是的,它正在做它应该做的事情。我希望它重定向到最后一个视图。实际上,它是相同的视图,但 DynamicFilter 组合设置为最初选择的部门。我该如何更改它以使该组合在保存时不会更改为“全部”?
    【解决方案2】:

    这是我最终用来执行所需操作的内容。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多