动态生成友好 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扩展名)
这可能吗?谢谢大家
被称为"路由"。将 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-home 和 xyz.com/blog/How-to-clean-a-car 这样的链接,它会起作用。
希望对您有所帮助。