从ASP.net中的URL中删除ID

时间:2015-10-14 19:21:07

标签: asp.net

我想从ASP.net 2010中的URL中删除ID。 我试图在网上搜索,但我没有得到一个明确的解决方案。 您能帮助我,或者给我发送明确的解决方案链接,以便在我的网站上理解和申请吗?

我在Architecture.aspx页面中有一个简单的datalist。这个datalist从SqlDataSource1获取信息(参见下面的代码)。 当我按下LinkBut​​ton(Image1)时,在我拥有的URL(http://localhost:51550/Portfolio/ViewProject.aspx?ID=1)中打开一个新页面(ViewProject)。我不想显示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);
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

哈拉曼的实施并不好。他的实施并没有检查是否缺少ID&#34; ID&#34;在会议中。这意味着如果有人直接导航到页面而没有点击该链接按钮,他们就会获得NullReferenceException。他们为什么要直接在那里导航?也许他们给它添加了书签。或者他们在会话到期后刷新页面。或者他们与同事共享链接。

相反,您应该传递网址中的ID。关于它,没有什么不专业的。对于不包括它的问题,它当然更可取。如果您关注外观,可以让它看起来更漂亮。您不必使用查询字符串。

查询字符串示例:

img

ASP.NET有一个routing概念,您可以在应用程序中使用它来获得干净的URL。使用路由,您的网址可能如下所示:

example.com/ViewProject.aspx?id=987

使用其他一些工具,您可以使搜索引擎/用户友好(Stack Overflow可以做到这一点):

example.com/ViewProject/987