【问题标题】:How to hide a query string parameter in the url如何在 url 中隐藏查询字符串参数
【发布时间】:2011-08-26 05:11:32
【问题描述】:

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

姓名

  • abc
  • bcd
  • cde

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

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

【问题讨论】:

  • 为什么要隐藏它?作为高级用户,直接更改 URL 以获得所需的效果可能是一个优势。例如。 http://www.google.com/search?q=this+will+work+great.

标签: asp.net query-string navigateurl


【解决方案1】:

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

this article 在决定这是否适合您时可能会有所帮助。

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

【讨论】:

  • 感谢您的及时回复。但是如何在代码中设置 cookie。有什么办法可以为“在新选项卡中打开”的点击事件添加一些代码
  • 刚刚添加了一个链接来帮助你:)
  • 再次感谢 Nathan,但我究竟可以在哪里添加 cookie 详细信息。它是浏览器默认的上下文菜单,当我点击“在新标签中打开链接”时,我不知道如何添加我的一些代码。
【解决方案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");
}

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

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

【讨论】:

    【解决方案3】:

    正如@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>
    

    正如您在前面的代码 sn-p 中看到的,您必须添加一个隐藏字段以通过简单的 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 类的PreviousPage 属性访问上一页。

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

    【讨论】:

    • 我试过了。但是有一个问题,上一页和第一页是一样的。所以,它给了我一个“循环参考错误”。我的情况如下。我有一些行的网格。如果我单击它,则必须加载一些小部件,它将显示所选行/所选面板项目的详细信息(以任何一个为准)。现在,如果我希望这个功能出现在一个新窗口中,我应该这样做以便新页面知道我已经选择了一行并且应该加载特定的小部件
    • 请原谅@Noel,我没有对你的问题给予足够的重视。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 2018-09-01
    相关资源
    最近更新 更多