2011-05-16 174 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