我创建了一个新的Web窗体(ASP.NET 4.5)项目,我正在尝试让URL路由工作。
RouteConfig.cs
看起来像这样:
routes.MapPageRoute("surveyhome", "survey/home", "~/Survey.aspx");
routes.MapPageRoute("surveyquestions", "survey/questions/{q}", "~/Survey.aspx");
我的链接看起来像这样:
<a href="/survey/questions/1">1</a>
它正确加载Survey.aspx
页面,所以我知道它部分正常工作,但是这段代码(在该页面的代码隐藏中)不起作用:
if (Page.RouteData.Values["q"] != null)
{
// do something
}
它始终为空。为什么呢?
答案 0 :(得分:1)
我测试了你的代码,在ASP.NET 4.0上没有问题。
尝试定义默认值,例如
routes.MapPageRoute("surveyquestions",
"survey/questions/{q}", "~/Survey.aspx",
false,
new RouteValueDictionary
{ { "q", String.Empty } });
这解决了你的问题吗?
答案 1 :(得分:0)
确保在Web.config中注册到IIS的UrlRoutingHandler和UrlRoutingModule是4.0版本,而不是3.5版本。这是我能想到的唯一可以让路由工作但你的参数不能映射的东西。
答案 2 :(得分:0)
首先检查它是否包含您的情况下的密钥,您可以使用此行代码
来实现此目的 protected void Page_Load(object sender, EventArgs e)
{
if (Page.RouteData.Values.ContainsKey("q"))
{
if (Page.RouteData.Values["q"] != null)
{
Context.Response.Write(Page.RouteData.Values["q"]);
}
}
}
你有没有检查过它是正确的路线..... ????
答案 3 :(得分:-1)
我遇到了同样的问题,我通过在web.config的配置部分添加以下内容来解决此问题:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>