2015-10-14 34 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