我有一个面板栏,里面有一些项目。当我右键单击项目并选择“在新选项卡中打开”时,我需要在新选项卡中打开链接。 例如。如果我的页面是“ http:localhost / MyPage ” 我的网格是:
命名
当我点击第二项时,navigateUrl将是“ http:localhost / MyPage /?Name = bcd ”
这很好用。 但是我想在网址中隐藏这个名字。有没有其他方法,我可以将名称传递给下一页而不将其暴露在网址中。我可以使用会话,但不幸的是,我无法将其编写为默认上下文菜单的代码。
答案 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");
}
当然,如果你有很多链接,那将是非常麻烦的。您可以使用网格(希望您在撰写问题时使用它)并使用命令名称和命令参数属性捕获行事件。
要隐藏浏览器地址栏中的网址,您需要进行网址重写。有关网址重写的更多信息,请访问codeproject和msdn上的这些网页。
答案 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;