Page.RouteData.Values [“参数”]不起作用

时间:2013-06-02 20:47:25

标签: c# asp.net routing

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

答案 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>