如何在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"
请帮我这里。
你有两个问题:
首先,你的(第二)地址不使用的路由表,将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"]
Thanx为您的Guidance.I解决它自己。 –
@SunnySandeep:如果解决方案与发布的解决方案不同,并且您认为它很有用,请添加您自己的答案以供将来参考。 –
这是错误发生的。我再次接受了答案。 –
我发现了一个更好的办法来解决这个问题。在ListView控件名为“listnews”下面写的代码里面的ItemTemplate: -
<a href="NewsDetail.aspx?ID=<%#Eval("ID") %>"> <%#Eval("Title") %> </a>
我修改了它作为
<a href="News/<%#Eval("ID") %>"> <%#Eval("Title") %> </a>
现在运作良好,对我好。
哪条线路导致此错误? – Kuzgun
当程序控制达到:if(!string.IsNullOrEmpty(Page.RouteData.Values [“Id”]。ToString())) {}这里它甩错了 –