动态生成友好 URL,并在唯一页面中呈现 SQL 数据库中的内容,用于在 Asp.Net C# 中单击的所有帖子

本文关键字:Asp Net 用于 单击 数据库 URL 唯一 动态 一页 SQL | 更新日期: 2023-09-27 18:36:31

当我在我的网站中构建博客部分时,我想知道如何在唯一的页面模板或视图中呈现每篇博客文章。我不想手动创建aspx,然后用标题SEO命名它们。

步骤1 :我创建了一个表,它可以完全存储所有详细信息,包括图像,内容,标题,并且我能够检索这些值以将其进一步绑定到中继器中。工作正常

步骤2:但是,现在接下来的事情是,单击任何博客时都会显示博客详细信息页面,但是它会带有与标题匹配的不同URL吗?

假设当前URL是 www.xyz.com/blog/blogdeatils.aspx 的,如果它正在渲染一篇谈论维基百科的文章,那么我希望我的URL是 www.xyz.com/blog/how-wikipedia-works 的(没有aspx扩展名)

这可能吗?谢谢大家

动态生成友好 URL,并在唯一页面中呈现 SQL 数据库中的内容,用于在 Asp.Net C# 中单击的所有帖子

被称为"路由"。将 Global.asax 添加到您的项目中,接下来只是您的文件示例:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>

<script runat="server">
void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("Article", "blog/{name}", "~/BlogDetails.aspx");
}
void Application_End(object sender, EventArgs e) 
{
    //  Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e) 
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode
    // is set to InProc in the Web.config file. If session mode is set to StateServer 
    // or SQLServer, the event is not raised.
}

在您的博客详细信息中.aspx您可以使用下一个代码来获取文章的标题:

string article_name = Page.RouteData.Values["name"] == null ? "No article" : Page.RouteData.Values["name"].ToString();

然后使用它从数据库中检索信息。

您的 Global.ascx 文件的内容:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Routing" %>

<script runat="server">
void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("Article", "blog/{name}", "~/BlogDetails.aspx");
    routes.MapPageRoute("Main Page", "Home", "~/Default.aspx");
}
void Application_End(object sender, EventArgs e) 
{
    //  Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e) 
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode
    // is set to InProc in the Web.config file. If session mode is set to StateServer 
    // or SQLServer, the event is not raised.
}

使用您有一些表文章,其中包含诸如ID,名称,图像,信息之类的列。并且,在BindDetails.aspx 中,您具有图像的图像控件和详细信息的标签控件。因此,您的绑定详细信息.aspx.cs将是(命名空间除外):

protected void Page_Load(object sender, EventArgs e){
    if (Page.RouteData.Values["name"] == null)
        Response.Redirect("~/Home");
    else{
        string name = Page.RouteData.Values["name"].ToString();
        if (!IsPostBack)
            RetrieveArticleByItsName(name);
    }
}
protected void RetrieveArticleByItsName(string article){
    SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["YourConnectionName"].ConnectionString;
    SqlCommand cmd = new SqlCommand("select TOP 1 * from Articles where lower(name) = lower(@name)", con);
    cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = article;
    try{
        con.Open();
        SqlDataReader sdr = cmd.ExecuteReader();
        sdr.Read();
        imgImage.ImageUrl = "your_folder/" + sdr["image"].ToString();
        lblDetails.Text = sdr["info"].ToString();
    }
    catch(Exception ex){
        //work with exceptions
        Response.Write("<script language='javascript'>alert('" + ex.Message.ToString() + "');</script"); // Get alert with exception
    }
    finally{
        con.Close();
    }
}

让我们想想,你有两篇文章的名字是"如何清洁家庭"和"如何清洁汽车"。现在你可以给每个人像 xyz.com/blog/How-to-clean-homexyz.com/blog/How-to-clean-a-car 这样的链接,它会起作用。

希望对您有所帮助。