【发布时间】:2017-05-02 12:45:22
【问题描述】:
我有一个包含几个基本页面的 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 页面。所以网址看起来像这样https://example.com/awesome-event
我添加了适当的路线
routes.MapPageRoute("Awesome-Event", "Awesome-Event", "~/Awesome-Event.aspx");
这很好用,但我希望能够添加新事件,而不必担心每次都添加新的 aspx 页面。我想我可以为此使用 URL 重写。我想要实现的是拥有一个传递查询字符串但保持漂亮 URL 的单个 .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-Event1 和http://localhost:51197/Awesome-Event2 都将我带到event.aspx 页面(我可以判断,因为我遇到了断点),但它实际上并没有传递ID 的查询字符串。
我这样做是否正确?有没有更好的解决方案。据我了解,MVC 使这种事情变得容易,但我并没有太多经验。数据库已经设置好了,我的项目是一个 webforms 应用程序,所以我什至不知道是否可以将 MVC 添加到我当前的项目中。
【问题讨论】:
-
我的建议是,为工作使用正确的工具。这正是 MVC 旨在处理的场景。当您弄清楚如何将其应用于现有项目时,您可以遵循 ASP.NET MVC 中的初学者教程之一并启动并运行它,从而为您在未来节省大量维护难题。您可以针对现有数据库构建 MVC 解决方案,只需搜索“ASP.NET MVC 数据库优先”
-
@Daniel 路由在 web 表单中非常好(路由只是 MVC 的一小部分)——甚至还有一个 in-depth MSDN article about it。 onTheInternet - 我现在没有时间给出完整的答案,但是仔细阅读那篇文章,您应该能够使用路由参数。
-
我只会构建我的 URL 更像
https://example.com/events/awesome。看起来更干净。