gpt4 book ai didi

c# - 是否可以在 webforms 应用程序的 URL 路由中使用查询字符串

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:42 25 4
gpt4 key购买 nike

我有一个包含几个基本页面的 Web 表单应用程序。我已经创建了路由以确保这些页面最后不需要 .aspx。

routes.MapPageRoute("About", "About", "~/About.aspx");
routes.MapPageRoute("Contact", "Contact", "~/Contact.aspx");
routes.MapPageRoute("faq", "faq", "~/faqs.aspx");
routes.MapPageRoute("Donation", "Donation", "~/Donation.aspx");

我有一个 sql server 数据库,其中包含有关我们举办的事件的数据。该表包含简单的值,例如 eventID、位置、日期、我们的目标等。

目前我的数据库中也只有一个,所以我刚刚创建了一个带有事件名称的新 aspx 页面。所以 url 看起来像这样 https://example.com/awesome-event

然后我添加了合适的路线

routes.MapPageRoute("Awesome-Event", "Awesome-Event", "~/Awesome-Event.aspx");

这很好用,但我希望能够添加新事件,而不必担心每次都添加新的 aspx 页面。我想我可以为此使用 URL 重写。我想要实现的是拥有一个传递查询字符串但保持美观的 URLS 的单个 .aspx 页面。

所以我所做的就是创建一个简单命名为 event.aspx

的新 aspx 页面
routes.MapPageRoute("Awesome-Event1", "Awesome-Event1", "~/event.aspx?id=1");
routes.MapPageRoute("Awesome-Event2", "Awesome-Event2", "~/event.aspx?id=2");

在我的 event.aspx 页面后面的代码看起来像这样

protected void Page_Load(object sender, EventArgs e)
{
string query = Request.QueryString["id"];
if(query != null)
{
PageLable.Text = query.ToString();
}
}

所以当前输入 http://localhost:51197/Awesome-Event1http://localhost:51197/Awesome-Event2 都带我去event.aspx 页面(我知道是因为我遇到了断点)但它实际上并没有传递 ID 的查询字符串。

我的做法是否正确?有没有更好的解决办法。根据我的理解,MVC 使这种事情变得容易,但我并没有太多经验。数据库已经设置好了,我的项目是一个 webforms 应用程序,所以我什至不知道是否可以将 MVC 添加到我当前的项目中。

最佳答案

查看 MapPageRoute() 文档:

https://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.mappageroute.aspx

它有这个例子:

routes.MapPageRoute("SalesSummaryRoute",
"SalesReportSummary/{locale}", "~/sales.aspx");

您可以像这样调整您的事件页面:

routes.MapPageRoute("Awesome-Event",
"Awesome-Event/{id}/", "~/event.aspx");

这将允许您使用这样的 url:

https://example.com/Awesome-Event/2/

And then you can see which event to render in your event.apsx page like this:

protected void Page_Load(object sender, EventArgs e)
{
if (Page.RouteData.Values["id"] != null)
{
int eventID = Convert.ToInt32(Page.RouteData.Values["id"]);
}
}

如果你想变得花哨,你可以这样做:

protected void Page_Load(object sender, EventArgs e)
{
if (Page.RouteData.Values["id"] != null)
{
int eventID;
if (int.TryParse(Page.RouteData.Values["id"], out eventID))
{
//render event based on numeric ID
}
else
{
//lookup event based on a string title. Then you could use a url like:
//https://example.com/Awesome-Event/SuperbowlLII
}
}
}

但是如果您同时允许 ID 和标题引用数据信息,请小心,否则您可能会有效地拆分两个页面上内容的搜索引擎排名。您需要在您的 html 中指定一个规范的 url,这样只有一个可能的事件地址才能获得搜索引擎的所有信任。

关于c# - 是否可以在 webforms 应用程序的 URL 路由中使用查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43738241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com