-1

我有一个带有通过用户控件构建的转发器的 aspx 网络表单页面。每个中继器项目都有一个链接按钮。我想要发生的是,当单击 LinkBut​​ton(在页面 A 的用户控件上的中继器中)时,会在新选项卡中打开 url,并传递该 LinkBut​​ton 旁边的隐藏 ID(根据 Web 开发安全性最佳实践如果可能)到新选项卡中的 aspx 页面(页面 B)。 

页面 A 和页面 B 都在同一个应用程序中。

我上面描述的目的是让用户在从通过单击链接按钮打开的 URL 返回后可以轻松地返回到他们的搜索结果。

我对如何做到这一点的想法持开放态度,这些想法更接近标准的最佳实践方法。


到目前为止,我已经尝试过:

1) 跨页发布——这适用于传递 id,但不适用于在新标签中打开。

2)将 PostBackUrl 设置为页面 B 的 url,使用 OnClientClick 调用 javascript 设置 Page.Form.Target="_blank" 以将来自用户控件的隐藏 ID 设置为页面 B 上的 html 隐藏输入的值。 

3) 我还尝试在 OnClientClick 中使用 window.open("page B url", "_newtab")。

  • a) 到目前为止,唯一有效的方法是上述 3 种不同方法中的第 2 种。 

    但是,在新选项卡中加载页面 B 后,我不知道如何将页面 A 的 Page.Form.Target 重置为之前的状态,然后将其设置为“_blank”

  • b)我尝试过的重置 Page.Form.Target 的方法是:

    • 1) 重置页面 A 的 Page_Load 中的目标,其中 IsPostBack == true --> 导致页面 B 加载与页面 A 相同的内容。

    • 2) 在页面A的用户控件的Page_Load中重置目标->与方法1相同的结果

    • 3)在页面A的用户控件中重置页面A的用户控件的LinkBut​​ton的OnUnLoad中的目标-->与方法1相同的结果

    • 4) 通过 LinkBut​​ton 的 OnClientClick 重置 javascript 中的目标 --> 不起作用

    • 5) 使用来自页面 A 的包含对页面 A 表单的引用的公共变量重置页面 B 的 Page_Load 中的目标
      (类似于可以通过跨页面发布完成的操作)--> 不起作用。 


我想接下来尝试的是:

1)     在页面A上包装另一个用户控件以显示页面B的内容,在asp面板(面板B)中

2)     将页面B的内容放入新的用户控制页面

3)     将页面A上的搜索结果内容包装在一个asp Panel(Panel A)中。

4)     当新用户控件上的repeater中的LinkBut​​ton被点击时,Panel A中的搜索结果内容将被隐藏,Panel B将显示出来。

5)     当用户想要返回搜索结果时,点击Panel B内容中的“Return to Search”链接按钮,Panel B会被隐藏,Panel B的内容会被清除,Panel A会再次显示。


我还不确定这是否会奏效。

看起来这应该不是那么困难。

这是一个直截了当的概念,我认为这是 Web 开发中相当普遍的情况。

我觉得 Wiley Coyote 试图抓住 Road Runner,因为我想出了精心设计的聪明、深思熟虑的计划,但都完全失败了。

我现在举着一个小牌子,上面写着:“救命!

4

2 回答 2

1

我通过以下代码解决了同样的问题,您只需在您的 HTML 页面中尝试此操作以获取按钮GRIDVIEW

 <asp:LinkButton ID="LinkButton1" runat="server" Text="View" CommandArgument='<%# Bind("ref") %>'
   OnClick="LinkButton1_Click" OnClientClick="document.forms[0].target ='_blank';">View</asp:LinkButton>***
于 2014-10-23T09:57:50.377 回答
0

我实际上已经弄清楚了。

我通过结合这篇文章上的标记答案,当我们点击 LinkBut​​ton 时如何打开新标签,以及这篇文章上的标记答案,是否可以将点击事件添加到超链接?.



用户控件的转发器中的我的转发器 ItemTemplate看起来与此类似:

<asp:HiddenField ID="hfId" runat="server"  
    Value='<%# Eval("Id") %>'/>
<asp:HyperLink ID="myLink" runat="server" 
    Text='<%# Eval("Name") %>' 
    NavigateUrl="/myUrl.aspx" 
    Target="_blank"  />
<asp:Button ID="btnSubmit" runat="server" 
    Text="Submit" 
    OnClick="BtnClick"
    Style="display: none;" />



这是我在转发器的 ItemDataBound 中的代码:

protected void RptrItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    var myId = "";

    var myNameLink = e.Item.FindControl("myLink") as HyperLink;

    if (myNameLink != null)
    {
      var submitButton = e.Item.FindControl("btnSubmit") as Button;

      if (submitButton != null)
      {
        var submitButtonClientId = submitButton.ClientID;

        myNameLink.Attributes.Add("onclick", "onNameClick('" + submitButtonClientId + "')");
      }
    }
  }
}//end RptrItemDataBound



javascript代码 :

<script type="text/javascript">
  function nameClick(buttonId)
  {
    document.getElementById(buttonId).click();
  }
</script>



这是BtnClick C# 代码

protected void BtnClick(object sender, EventArgs e)
{
  var btnSelect = sender as Button;

  if (btnSelect == null)
  {
    return;
  }

  var myListItem = (RepeaterItem)btnSelect.DataItemContainer;

  if (myListItem != null)
  {
    var hfId = myListItem.FindControl("hfId") as HiddenField;

    if (hfId != null)
    {
      var intId = int.Parse(hfId.Value);

      Session["selectedId"] = intId;
    }//end if (hfId != null)
  }//end if (myListItem != null)
}//end btnClick
于 2013-03-25T18:01:54.657 回答