2015-10-14 33 views
-3

我想從ASP.net 2010中的URL中刪除ID。 我試圖在網絡中搜索,但我沒有得到明確的解決方案。 你能否幫助我,或給我發送鏈接以獲得清晰的解決方案,以便在我的網站上了解和應用?從ASP.net的URL中刪除ID

我有一個簡單的datalist頁面Architecture.aspx。此數據列表從SqlDataSource1獲取信息(請參閱下面的代碼)。 當我在鏈接按鈕(Image1)中按下時,會打開一個新頁面(ViewProject),位於我有的URL(http://localhost:51550/Portfolio/ViewProject.aspx?ID=1)中。我不想顯示ID:

<asp:DataList ID="DataList1" runat="server" DataKeyField="ID" 
     DataSourceID="SqlDataSource1" RepeatColumns="4" RepeatDirection="Horizontal" style="margin-right: 0px" 
     EnableViewState="false"> 
     <ItemTemplate> 
      <asp:Panel ID="Panel1" runat="server" BorderStyle = "None" Height="250px" Width="200px"> 
      <table id="Table1" runat="server" style="height: 50px"> 
      <tr > 
      <td style="color: #000000; width: 75%; font-weight: lighter" align="center"> 
      <asp:LinkButton Width="145px" Height ="200px" ID="Image1" runat="server" CommandName="ViewDetails" CommandArgument='<%#Eval("ID") %>' OnCommand = "Click_LinkButton1" > 
      <div class ="pic"> 
      <asp:Image ID = "im1" runat="server" ImageUrl= '<%# Eval("mainPic")%>' Width="150px" Height ="200px" BorderWidth="0px" /> 
      </div> 
      </asp:LinkButton> 
      </td> 
      </tr> 
      <tr > 
      <td style="width: 75%; font-weight: lighter; padding-left:19px"> 
      <asp:Label ID="lbl2" runat="server" Text='<%#Eval("title") %>' ForeColor="Gray" Font-Names="Lucida Sans Unicode" Font-Size="12px"></asp:Label> 
      </td> 
      </tr> 
     </table> 
     </asp:Panel> 
     </ItemTemplate> 
    </asp:DataList> 
    </div> 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:PortfolioConnectionString %>" 
    SelectCommand="SELECT [ID], [title], [mainPic] FROM [Project]"> 
</asp:SqlDataSource> 

protected void Click_LinkButton1(object sender, CommandEventArgs e) 
{ 
    string url = "ViewProject.aspx?"; 
    url += "ID=" + e.CommandArgument; 
    Response.Redirect(url); 
} 
+0

我聽到退格鍵工作得很好。您應該顯示一些代碼,以便我們可以更好地理解您想要執行的操作。現在,我不明白你的問題。 – mason

+0

我添加了一些代碼.. – Hadil

+0

您可以創建一個名爲ID的會話變量並將其值設置爲在其他頁面上訪問 – haraman

回答

0

你可以使用它作爲

protected void Click_LinkButton1(object sender, CommandEventArgs e) 
{ 
    string url = "ViewProject.aspx"; 
    Session("ID") = e.CommandArgument; 
    Response.Redirect(url); 
} 

,並可以訪問它作爲另一頁的頁面加載事件

protected void Page_Load(object sender, System.EventArgs e) 
{ 
    String strID = Session("ID").ToString; 
} 

要了解更多關於會議訪問asp.net-tutorials.com/state/sessions/,MSDN文章ASP.NET Session StateHow to: Read Values from Session State

+0

我試圖添加會話(「ID」),但我有消息:名稱會話不存在於當前上下文 – Hadil

+0

謝謝我試過session.add(「ID」,e.Command.Argument),它的工作原理 – Hadil

+0

如果有人直接訪問此頁面而未點擊該鏈接,會發生什麼情況? – mason

0

哈拉曼的執行情況並不好。他的實施沒有檢查會議中缺少「身份證」。這意味着如果有人直接導航到頁面而沒有點擊該鏈接按鈕,他們將得到一個NullReferenceException。他們爲什麼直接在那裏導航?也許他們給它加書籤。或者他們在會話過期後刷新頁面。或者他們與同事分享鏈接。

取而代之的是,你應該應該傳遞URL中的ID。沒有什麼不專業的。不包括它會導致的問題當然更可取。如果你關注外觀,你可以看起來更好看。您不必使用查詢字符串。

查詢字符串例如:

example.com/ViewProject.aspx?id=987 

ASP.NET有routing一個概念,你可以在你的應用程序的URL的清潔利用。使用路由,你的URL可以是這樣的:

example.com/ViewProject/987 

並與一些額外的工具,可以使搜索引擎/用戶友好(堆棧溢出做到這一點):

example.com/ViewProject/987/My-Fancy-Project 
+0

正如我在評論中回答的那樣,開發人員將決定他想做什麼,我們不能強迫他按我們的方式使用,也可能並不總是需要顯示ID。 – haraman

+0

現在如果他不想在url中顯示'987',OP會想要隱藏所有的ID – haraman

+0

@haraman然後在你的代碼中,你應該顯示如何檢查以確保值存在在訪問它之前的會話中。但是這仍然沒有解決我提出的其他問題,這使得你的實現不可取。隱藏ID不是一個好主意,沒有理由這樣做。 – mason