【问题标题】:Show different tabs based on the link clicked根据点击的链接显示不同的选项卡
【发布时间】:2014-11-18 12:57:16
【问题描述】:

场景

当在不同页面上单击不同链接时,我想显示 ajax 选项卡容器控件的特定选项卡。

澄清一下:链接在 page1.aspx 上,而 ajax 选项卡容器在 page2.aspx 上。

所有链接仅重定向到 page2.aspx。

但我需要根据上一页(page1.aspx)点击的不同链接显示不同的标签(在page2.aspx上)。

我在寻找什么

我认为我可以按照以下伪代码行做一些事情:

LinkButton lnk1 = (LinkButton)PreviousPage.FindControl("btnLink1");
if (lnk1.Click)
{
  TabContainer1.ActiveTab = tab1;
}

这个想法是,如果点击了某个链接,则应该显示一个特定的选项卡。

我会把它放在 page2.aspx 的 PageLoad 事件中。

如何实现服务器端(c#)?或者我需要一个客户端(Javascript)方法吗?

我的尝试

我已尝试按照其中一个答案的建议使用会话变量,但点击事件未触发。

这是我在点击每个链接按钮时将变量存储在 page1.aspx 上的方法。

 protected void editPosition_Click(object sender, EventArgs e)
    {
        Session["LinkSelection"] = "lnkPosition";
    }

 protected void editRoom_Click(object sender, EventArgs e)
    {
        Session["LinkSelection"] = "lnkRoom";
    }

然后在 PageLoad 我对 page2.aspx 进行检查

 if (Session["LinkSelection"].ToString() == "lnkPosition")
   {
            TabContainer1.ActiveTab = PositionsTab;
   }

 if (Session["LinkSelection"].ToString() == "lnkRoom")
   {
            TabContainer1.ActiveTab = RoomsTab;
   }

链接的标记如下:

<asp:LinkButton ID="editPosition" runat="server" OnClick="editPosition_Click" 
     Text="Position" ClientIDMode="Static" ></asp:LinkButton>
<asp:LinkButton ID="editRoom" runat="server" Text="Room" OnClick="editRoom_Click" 
     ClientIDMode="Static" ></asp:LinkButton>

最终编辑

我通过使用查询字符串参数而不是会话变量解决了我的问题。

【问题讨论】:

  • 据我了解,根据链接,您希望在不同页面上显示/隐藏标签。因此,您必须在回发中存储您的链接选择值,然后基于您必须显示不同的选项卡。要存储链接选择,您可以使用加密的 QueryString 或 Session 变量。
  • 谢谢@Piyush。也许我的问题不清楚。每个链接的url总是一样的,但是ajax控件的tab需要不一样。
  • 你想要一样,我在上面的评论中解释了什么?
  • 你是对的。我已经接受了你的回答,谢谢。
  • 伟大的@Dura,它帮助你解决了你的问题。干杯

标签: javascript c# jquery ajaxcontroltoolkit


【解决方案1】:

我想,你必须试试这个。

在page1.aspx,当点击链接时,你必须在一个变量中设置链接选择值

protected void lnkUser_Click(object sender, EventArgs e)
{
    Session["LinkSelection"] = "lnkUser";
} 

protected void lnkCustomer_Click(object sender, EventArgs e)
{
    Session["LinkSelection"] = "lnkCustomer";
}

在 page2.aspx 的 Page_Load 事件中,您必须检查会话 varribale 值,然后基于此,您必须在 Ajax 选项卡上显示真/假

if (Session["LinkSelection"] == "lnkUser")
 {
    //put your User tab Active/Enabled logic here 
 }
else if (Session["LinkSelection"] == "lnkCustomer")
 {
    //put your Customer tab Active/Enabled logic here
 }

除了使用 If else,您还可以使用 Switch Case。这是示例代码。 如果您不想使用会话变量,请使用 page2.aspx 传递查询字符串中的值,例如 Response.Redirect("page2.aspx?LinkSelection=lnkUser")。您还可以将加密的查询字符串发送到 page2,在那里您可以对其进行解密和处理

【讨论】:

  • 虽然你的建议很有道理,但我的 click_event 处理程序永远不会被命中。
  • 你能显示不工作的代码吗?那我帮你解决
  • 你的 page1.aspx 应该有 Link 1​​ton> 和 page1.aspx.cs 文件应该已保护 void btnLink1_Click(object sender, EventArgs e) { }
  • 你的意思是按钮导致验证?顺便说一句,它可能是链接的视图状态模式吗?
  • 您能否将 ValidationGroup 属性添加到每个具有不同值的链接按钮?就像 ​​ton>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2021-12-09
  • 1970-01-01
  • 2012-06-27
相关资源
最近更新 更多