2017-06-09 34 views
1

在我的MVC5应用程序中,我试图将一个字符串传递给一个动作。为什么不将字符串参数路由到动作?

PodcastsController我有一个动作叫Tagged

public ActionResult Tagged(string tag) 
{ 
    return View(); 
} 

例如,如果我想要的字符串Test传递给Tagged行动,它看起来像这样的网址:

/播客/标记/测试

我有一个这样的路线:

routes.MapRoute(
     "Podcasts", 
     "Podcasts/Tagged/{tag}", 
     new { controller = "Podcasts", action = "Tagged", tag = UrlParameter.Optional } 
    ); 

编辑我打电话了Tagged动作是这样的:

if (!string.IsNullOrEmpty(tagSlug)) 
{ 
    return RedirectToAction("Tagged", "Podcasts", new { tag = tagSlug }); 
} 

当我设置一个破发点上Tagged行动,tag总是空

任何人都可以看到我做错了什么?

我敢肯定有一些错误的路线,但我想不出什么...

+0

@maccettura,我是一个相对较新的程序员 - 你能解释一下吗? –

+0

你可以分享你调用'标记'行动的代码吗? –

+0

@VinylWarmth我最初误读你的文章。忽略我以前的评论。当你点击路线时,你是否能够在你的“标记”行动中找到断点? – maccettura

回答

1

你得到一个null的原因是因为你实际上没有在你的代码中传入一个叫做tag的参数:

if (!string.IsNullOrEmpty(tagSlug)) 
{ 
    return RedirectToAction("Tagged", "Podcasts", new { tagSlug }); 
} 

当你忽略它需要变量名的属性名,所以你实际上是传递变量tagSlug,你的行动不接受。试试这个:

if (!string.IsNullOrEmpty(tagSlug)) 
{ 
    return RedirectToAction("Tagged", "Podcasts", new { tag = tagSlug }); 
} 
+0

我编辑了我的帖子,那是我的一个错字。 –

+0

所以你有一个名为'tag'的变量,你通过了吗?我们可以看到标签被定义在哪里吗? – maccettura

+1

请忽略我的第一条评论,这解决了我的问题! –

0

必须exacly这样的工作....

然后去http://localhost:64147/podcast/tagged/hi和recive喜如标签

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "MyRoute", 
     url: "podcast/tagged/{tag}", 
     defaults: new { controller = "Podcasts", action = "Tagged", tag = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
0

的价值我很抱歉,我要问在这里,但你检查你的路线之前,可以覆盖任何其他途径?

路由是按照顺序完成的。对应于给定参数的第一路由选择,所以如果你有这样的路线第一

{controller}/{action}/{id} 

然后

Podcasts/Tagged/{tag} 

,因为第一个路径选择

路线顺序,你会得到空其实很重要

+0

嗨,我的帖子中的动作是第一个路线和默认操作是最后一个。 –

相关问题