【问题标题】:How to use Url Rewriting in asp.net如何在 asp.net 中使用 URL 重写
【发布时间】: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


【解决方案1】:

你有两个问题:

首先,你的(第二个)url不使用路由表,把url也改成http://AtharvaJournal.com/News/THE_ID

或者使用它来获取没有url映射的url的Id:

Request.QueryString["Id"]

其次,当Page.RouteData.Values["Id"] 为空时,您正在检查Page.RouteData.Values["Id"].ToString()

试试这个:

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

【讨论】:

  • @SunnySandeep:如果解决方案与发布的不同并且您认为它有用,请添加您自己的答案以供将来参考。
  • 这是错误的。我再次接受了答案。
【解决方案2】:

我找到了解决此问题的更好方法。在名为“listnews”的 ListView 中,在 itemtemplate 中编写了以下代码:-

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

我修改为

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

现在它运行良好,对我有好处。

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 2014-12-07
    • 2019-02-08
    • 1970-01-01
    • 2014-09-26
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多