2014-02-28 80 views
0

我正在使用Url重寫的asp.net應用程序。我的網頁上的名字是NewsDetail.aspx其代碼是:作爲如何在asp.net中使用Url重寫

<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" ID="Content1" runat="server"> 
    <div style="min-height: 150px; padding: 10px 10px;"> 
    <marquee behavior="scroll" direction="up" scrollamount="2" height="150"> 
     <asp:ListView ID="listNews" runat="server"> 
      <ItemTemplate> 
       <p> 
       <a href="NewsDetail.aspx?ID=<%#Eval("ID") %>"> <%#Eval("Title") %> </a> 
       </p> 
      </ItemTemplate> 
     </asp:ListView> 
    </marquee> 
    </div> 
</asp:Content> 

我有綁定列表視圖這在Default.aspx的好康頁面加載事件:

DataTable dt = new DataTable(); 
      dt = new Process_News().SelectPublishNews(); 
      if (dt.Rows.Count > 0) 
      { 
       listNews.DataSource = dt; 
       listNews.DataBind(); 
      } 

我想,當一個項目用戶點擊在隨後「listNews」列表視圖應該被重定向到NewsDetail.aspx WebPage.If用戶單擊項,它的ID = 1,則地址欄是顯示

http://AtharvaJournal.com/NewsDetail.aspx?ID=1 

但我想顯示爲 http://AtharvaJournal.com/News/1

爲此,我做了以下在Global.asax文件中的代碼:

void RegisterRoutes(RouteCollection routes) 
    {   
     routes.MapPageRoute("News", "News/{Id}", "~/NewsDetail.aspx"); 
    } 

    protected void Application_Start(object sender, EventArgs e) 
    { 
     RegisterRoutes(RouteTable.Routes); 
    } 

在NewsDetail.aspx頁我已經做了下面的代碼:

if (!string.IsNullOrEmpty(Page.RouteData.Values["Id"].ToString())) 
{ 
    string id = Page.RouteData.Values["Id"].ToString(); 

    long ID = Convert.ToInt64(Page.RouteData.Values["Id"].ToString()); 
    dt = new Process_News().SelectByID(ID); 
    if (dt.Rows.Count > 0) 
    { 
     hTitle.InnerText = dt.Rows[0]["Title"].ToString(); 
     PDetail.InnerText = Server.HtmlDecode(dt.Rows[0]["Contents"].ToString());      

    } 

} 

現在,當我寫在下面變薄我的地址欄:(http://AtharvaJournal.com/News/1) 然後它運行良好,但是當我直接點擊「listNews」ListView中的任何項目時它會顯示以下異常: -

"Object reference not set to an instance of an object" 

請幫我這裏。

+0

哪條線路導致此錯誤? – Kuzgun

+0

當程序控制達到:if(!string.IsNullOrEmpty(Page.RouteData.Values [「Id」]。ToString())) {}這裏它甩錯了 –

回答

2

你有兩個問題:

首先,你的(第二)地址不使用的路由表,將URL更改爲http://AtharvaJournal.com/News/THE_ID有太多。

或使用該工具來獲取ID爲URL不URL映射:

Request.QueryString["Id"] 

其次,要檢查Page.RouteData.Values["Id"].ToString()Page.RouteData.Values["Id"]爲空。

試試這個:

(string)Page.RouteData.Values["Id"] 
+0

Thanx爲您的Guidance.I解決它自己。 –

+0

@SunnySandeep:如果解決方案與發佈的解決方案不同,並且您認爲它很有用,請添加您自己的答案以供將來參考。 –

+0

這是錯誤發生的。我再次接受了答案。 –

1

我發現了一個更好的辦法來解決這個問題。在ListView控件名爲「listnews」下面寫的代碼裏面的ItemTemplate: -

<a href="NewsDetail.aspx?ID=<%#Eval("ID") %>"> <%#Eval("Title") %> </a> 

我修改了它作爲

<a href="News/<%#Eval("ID") %>"> <%#Eval("Title") %> </a> 

現在運作良好,對我好。