【问题标题】:Response.Redirect, keep tabcontainer on active tabResponse.Redirect,将 tabcontainer 保持在活动选项卡上
【发布时间】:2011-10-05 15:45:09
【问题描述】:

当我让每个提交都通过 response.redirect 时,我的 VB.net tabcontainer 需要保持在活动选项卡上。

我怎样才能做到这一点?我需要那个 response.redirect 因为它会显示在主标签容器中添加的内容。

<asp:TabContainer runat="server" ActiveTabIndex="0" Height="200px" 
Width="175px" ScrollBars="Auto" EnableTheming="True" Font-
Underline="False" ID="TabContainer2" EnableViewState="False" 
Style="float:right; padding-left: 110px; margin-bottom: 340px;" 
OnActiveTabChanged="TabContainer1_ActiveTabChanged">


Protected Sub TabContainer1_ActiveTabChanged(ByVal sender As Object, 
ByVal e As EventArgs)
    ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex
End Sub


Protected Sub SubmitCompanies_Click(ByVal sender As Object, ByVal e 
As System.EventArgs) Handles SubmitCompanies.Click
*****there is more code here but for this question, it's not necessary so it has been 
omitted*****
    Response.Redirect(Request.RawUrl)
    ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles Me.Load
ProductID.Value = Request.QueryString("id")
Page.Response.Cache.SetCacheability(HttpCacheability.NoCache)
If Not ViewState("ActiveTabIdx") Is Nothing Then
    TabContainer1.ActiveTabIndex = Convert.ToInt32(Session("ActiveTabIdx"))
End If
End Sub

【问题讨论】:

    标签: asp.net vb.net viewstate response.redirect tabcontainer


    【解决方案1】:

    ViewState 不适用于Response.Redirect。对于您当前的实现,我将使用 QueryString 或 Session 来存储对活动选项卡的引用。

    Response.Redirect(String.Format("{0}?tab={1}", Request.RawUrl, TabContainer1.ActiveTabIndex)) 
    

    【讨论】:

    • 我试过了,但收到一条错误消息,提示输入字符串的格式不正确。
    • 嗯...再试一次。我为标签容器使用了错误的 ID。
    • 哦,Visual Studio 捕捉到了这一点,我将其更改为 TabContainer1,抱歉我忘记提及了。不幸的是,仍然显示相同的错误消息。
    • 我认为这段代码没有任何问题...RawUrl 的输出是什么?没关系,但请尝试将第二个参数更改为:TabContainer1.ActiveTabIndex.ToString()。另外,你知道当页面加载正确时你必须添加一些逻辑来选择标签?
    • 我编辑了原始帖子以显示我在页面加载时的内容。我不太确定 tabcontainer,我只是按照我找到的教程进行操作,并希望它能正常工作。但它没有告诉我如何在刷新时保持标签处于活动状态。
    【解决方案2】:

    我认为您的解决方案将是使用 jquery 将选定的选项卡保存在 cookie 或用户单击选项卡时的任何位置,并使用 jquery 从 cookie 中获取旧的选定选项卡并使用 jquery 设置选定的选项卡

    【讨论】:

    • 我真的宁愿在 ASP.net 中执行此操作,因为我对 jquery 了解不多并且发现它非常复杂。
    • 如果有一个 jquery 教程听起来像我的情况,我很乐意通读它。我只是讨厌javascript。看不懂,看着好乱
    【解决方案3】:

    正如我所见,您正在分配视图状态值

    ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex
    

    之后

    Response.Redirect(Request.RawUrl)
    

    此代码是可访问的。

    首先要注意的是,新请求不携带 ViewState(通过调用 Redirect 方法启动新请求)。解决方案是使用查询字符串。在 RawUrl 末尾添加活动选项卡作为参数,然后在页面加载时读取它。

    希望对你有帮助,

    克里斯

    【讨论】:

    • 我尝试了Response.Redirect(Request.RawUrl(ViewState("ActiveTabIdx") = TabContainer1.ActiveTabIndex)),但我的页面转到了网站上完全不同的页面。
    • 您需要向 RawUrl Response.Redirect(Request.RawUrl + "?activeTab=" + TabContainer1.ActiveTabIndex) 添加一个新的查询字符串参数,然后使用 Request.QueryString("activeTab ")
    • 请求代码出现错误Property access must assign to the property or use its value. 我尝试在 Response.Redirect 之前和之后使用它,它说的是同样的事情。
    【解决方案4】:

    将活动选项卡索引保存在会话变量中并在您的Page_Load 事件中检查Session("ActiveTabIdx") 是否不是Nothing 或为空,然后将TabContainer1.ActiveTabIndex 设置为Session("ActiveTabIdx") 的值。像这样的:

        Protected Sub SubmitCompanies_Click(ByVal sender As Object, ByVal e 
    As System.EventArgs) Handles SubmitCompanies.Click
           'Rest of code
            Session("ActiveTabIdx") = TabContainer1.ActiveTabIndex
            Response.Redirect(Request.RawUrl)
        End Sub
    
        Protected Sub Page_Load(ByVal Sender As Object, ByVal e as System.EventArgs) Handles Page.Load
             If not ViewState("ActiveTabIdx") is Nothing Then
                    TabContainer1.ActiveTabIndex = Convert.ToInt32(Session("ActiveTabIdx"))
             End If
        End Sub
    

    在您的SubmitCompanies_Click 之间,您在设置ViewStat 变量的值之前重定向用户!

    【讨论】:

    • 我在哪里可以看到 ActiveTabIndex?在代码隐藏中? Visual Studio 无法识别我的 vb 页面上的 getIndexofActiveTab。
    • 在调用重定向之前的 SubmitCompanies_Click 事件中添加这段代码 Session("ActiveTabIdx") = TabContainer1.ActiveTabIndex
    • 它似乎可以工作,但是当我提交一个新公司时,它仍然会刷新并且标签会回到第一个。
    猜你喜欢
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2020-08-30
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2013-10-19
    相关资源
    最近更新 更多