如何在asp.net中使用Url重写

问题描述:

我正在使用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())) {}这里它甩错了 –

你有两个问题:

首先,你的(第二)地址不使用的路由表,将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

这是错误发生的。我再次接受了答案。 –

我发现了一个更好的办法来解决这个问题。在ListView控件名为“listnews”下面写的代码里面的ItemTemplate: -

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

我修改了它作为

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

现在运作良好,对我好。