2011-05-16 178 views
1

我有一个面板栏,里面有一些项目。当我右键点击项目,如果我选择“在新标签中打开”,我需要在新标签中打开链接。 例如。如果我的网页是 “HTTP:本地主机/我的页面” 我网格是:如何在url中隐藏查询字符串参数

名称

  • ABC
  • BCD
  • CDE

当我点击第二项,navigateUrl将为“http:localhost/MyPage /?Name = bcd

这工作正常。 但我想隐藏URL中的名称。有没有其他的方法,我可以将名称传递给下一页,而不会将其暴露在网址中。我可以使用会话,但不幸的是,我不能将它作为默认上下文菜单的代码编写。

+0

_Why_你想隐藏它吗?作为高级用户,直接更改URL以获得所需效果可能是一种优势。例如。 'HTTP://www.google.com/search Q =本+ +会+工作great'? – 2011-05-16 08:27:08

+0

为什么白痴不断在这些论坛上问“你为什么要隐藏它”的问题!?真的......安全......呃!并非所有网站都是完整的公共领域。有些是内部的,需要确保某些信息的安全。 – Fandango68 2017-09-20 04:38:36

回答

0

你可以设置一个cookie - 这样下次用户返回时,你甚至可以将它们返回到同一页面(如果你想的话)。

您可能会发现this article有助于确定这是否适合您。

如果你需要在客户端设置cookie,那么this article应该帮助你。

+0

感谢您的及时回复。但是我怎样才能在代码中设置一个cookie。有没有什么办法可以为“在新标签中打开”的点击事件添加一些代码 – Noel 2011-05-16 06:42:09

+0

刚刚添加了一个链接来帮助你:) – Nathan 2011-05-16 06:42:52

+0

再次感谢弥敦道,但我在哪里可以添加cookie的详细信息。这是浏览器的默认上下文菜单,当我点击“在新标签中打开链接”时,我不知道如何添加我的一些代码。 – Noel 2011-05-16 06:55:12

2

您可以使用LinkButton对象。他们将回发,然后您可以将请求重定向到所需的页面。

ASPX:

<asp:linkbutton id="lnkabcd" runat="server" text="abcd" onclick="lnkabcd_clicked"/> 

C#:

public void linkabcd_clicked(object sender, EventArgs e) 
{ 
    Response.Redirect("URL OF TARGET PAGE"); 
} 

Ofcourse这将是非常麻烦的,如果你有大量的链接。您可以使用网格(希望在您的问题中编写时使用它),并使用命令名称和命令参数属性捕获行事件。

要隐藏浏览器的地址栏中的网址,您需要进行URL重写。有关URL重写的更多信息,请访问codeprojectmsdn上的这些页面。

0

由于@TheVillageIdiot说,url重写是一种更好的方法。但是你也可以使用cross-page posting的能力。检查出来:

标记

<asp:HiddenField ID="HiddenField1" runat="server" ClientIDMode="Static" /> 

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/Second.aspx" Text='<%# Bind("Text") %>' OnClientClick='<%# "LinkButton1_Click(\"" + Eval("Value") + "\")" %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

<script type="text/javascript"> 
    function LinkButton1_Click(v) { 
     document.getElementById('HiddenField1').value = v; 
    } 
</script> 

正如你可以在上面的代码片断看到的,你必须添加一个隐藏字段通过简单的JavaScript来选择的项目存储。我还定义了一个名为SelectedValue的属性,以获取其他隐藏字段的值。

以下指令到目标页面的代码背后

protected void Page_Load(object sender, EventArgs e) 
{ 
    Repeater1.DataSource = new[] { 
     new { Text = "Item 1", Value = "Item 1" }, 
     new { Text = "Item 2", Value = "Item 2" }, 
     new { Text = "Item 3", Value = "Item 3" } 
    }; 
    Repeater1.DataBind(); 
} 

public string SelectedValue 
{ 
    get { return HiddenField1.Value; } 
} 

第二页

添加。

<%@ PreviousPageType VirtualPath="~/Default.aspx" %> 

最后,你必须通过PagePreviousPage属性访问到前一页。

string value = ((_Default)this.PreviousPage).SelectedValue; 
+0

感谢迈赫迪和TheVillageIdiot,让我试试这个方法.. – Noel 2011-05-16 08:57:42

+0

我试过了。但有一个问题,前一页与第一页相同。所以,它给了我一个“循环引用错误”。 我的场景如下。我有一些行的网格。如果我点击它,一些小部件必须加载,这将显示选定行/选定面板项目(无论哪个)的细节。现在,如果我想让这个特性出现在一个新窗口中,我应该这样做,以使新页面知道我已经选择了一行,并且应该加载特定的小部件 – Noel 2011-05-16 09:21:35

+0

对不起,我没有对你的问题没有足够的重视。 – 2011-05-16 09:48:45