8

我创建了一个新的 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
}

它始终为空。为什么?

4

4 回答 4

1

我已经测试了您的代码,在 ASP.NET 4.0 上对我来说没有问题。

尝试定义默认值,例如

routes.MapPageRoute("surveyquestions",
    "survey/questions/{q}", "~/Survey.aspx",
    false,
    new RouteValueDictionary 
        { { "q", String.Empty } });

这解决了你的问题吗?

于 2013-06-06T09:04:36.990 回答
0

确保在 Web.config 中注册到 IIS 的 UrlRoutingHandler 和 UrlRoutingModule 是 4.0 版本,而不是 3.5 版本。这是我能想到的唯一允许路由工作但您的参数不能映射的事情。

于 2013-06-07T05:56:44.460 回答
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"]);
            }
        }
    }

您是否检查过这是正确的路线.....????

于 2014-04-25T19:08:18.253 回答
-1

我有同样的问题,我通过在 web.config 的配置部分添加以下内容来解决这个问题:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
于 2013-11-28T01:23:31.317 回答