mvc动作方法无法识别参数

时间:2013-02-14 12:15:51

标签: c# asp.net asp.net-mvc

我正在尝试使用确认电子邮件设置会员提供商。使用memb成功注册User。供应商。

注册后,正在发送一封确认电子邮件,其中userProviderKey用于批准用户。链接发送如下

http://localhost:48992/Account/Verify/e37df60d-b436-4b19-ac73-4343272e10e8

用户必须单击使用密钥发送的链接(providerUserKey),此密钥甚至不会在调试模式下显示为参数

// in debug providerUserKey is null
public ActionResult Verify(string providerUserKey)
{    
}

可能是什么问题?

4 个答案:

答案 0 :(得分:1)

除非你在全局的asax中指定了一条规则,否则你的网址应该是

http://localhost:48992/Account/Verify?providerUserKey=e37df60d-b436-4b19-ac73-4343272e10e8

如果您想使用上述格式,则需要在global.asax

中映射新路线
routes.MapRoute(
    // Route name
    "routename",
    // Url with parameters
    "Account/Verify/{providerUserKey}/",
    // Parameter defaults
    new { controller = "Account", action = "Verify" }
    );

答案 1 :(得分:1)

尝试将查询更改为

http://localhost:48992/Account/Verify?providerUserKey=e37df60d-b436-4b19-ac73-4343272e10e8

您的ActionResult正在URL

中查找此参数

答案 2 :(得分:1)

默认MVC路由为{Controller} / {Action} / {Id} 因此,如果参数名称为Id ...

,则会识别它

将其更改为以下内容即可。

public ActionResult Verify(string id)
        {    
        }

如果您不想更改参数名称,那么您可以在global.asax文件中添加以下路由,它将正常工作。

routes.MapRoute("MyRouteName","{Controller}/{action}/{providerUserKey}")

如果需要,您也可以将默认值传递给它,因为您的路径是预定义的。 干杯

答案 3 :(得分:1)

如果您将Global.asax.cs文件的路由配置为:

          routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional });

您可以看到它有id参数作为可选项。因此,如果查询字符串被识别为id,那么它将具有您传递的值。

id更改为providerUserKey,以便为您完成工作。

      routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{providerUserKey}", // URL with parameters
            new { controller = "Home", action = "Index",providerUserKey=UrlParameter.Optional });

或者将默认的可选参数保留为id,并将providerUserKey作为附加的查询字符串参数传递。

这样说:

     @Html.Action("","",new { providerUserKey="e37df60d-b436-" })

希望有所帮助