如何在url中隐藏查询字符串参数

时间:2011-05-16 06:38:56

标签: asp.net query-string navigateurl

我有一个面板栏,里面有一些项目。当我右键单击项目并选择“在新选项卡中打开”时,我需要在新选项卡中打开链接。 例如。如果我的页面是“ http:localhost / MyPage ” 我的网格是:

命名

  • abc
  • BCD
  • CDE

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

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

3 个答案:

答案 0 :(得分: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");
}

当然,如果你有很多链接,那将是非常麻烦的。您可以使用网格(希望您在撰写问题时使用它)并使用命令名称和命令参数属性捕获行事件。

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

答案 1 :(得分:0)

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

在决定这是否适合您时,您可能会发现this article有用。

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

答案 2 :(得分:0)

正如@TheVillageIdiot所说,网址重写是一种更好的方法。但你也可以使用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" %>

最后,您可以通过PreviousPage类的Page属性访问上一页。

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