【发布时间】:2014-03-03 15:51:28
【问题描述】:
我正在开发一个使用 Url Rewriting 的 asp.net 应用程序。我的网页名称是 NewsDetail.aspx,其代码是:
<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 WebPage Page-Load 事件中将此 Listview 绑定为:
DataTable dt = new DataTable();
dt = new Process_News().SelectPublishNews();
if (dt.Rows.Count > 0)
{
listNews.DataSource = dt;
listNews.DataBind();
}
我希望当用户单击“listNews”列表视图中的项目时,应将其重定向到 NewsDetail.aspx WebPage。如果用户单击 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"
请帮帮我。
【问题讨论】:
-
哪一行导致这个错误?
-
当程序控件到达时:if (!string.IsNullOrEmpty(Page.RouteData.Values["Id"].ToString())) {} 这里显示错误
标签: c# asp.net global-asax