在我的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 :(得分: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 });
}
答案 1 :(得分:0)
它一定像这样工作......
然后转到http://localhost:64147/podcast/tagged/hi并将hi作为标记
的值重新显示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 }
);
}
答案 2 :(得分:0)
对不起,我在这里问,但你是否检查过你的路线是否可以覆盖任何其他路线?
路由是按顺序完成的。选择与给定参数对应的第一条路线,如果您首先使用此路线
{controller}/{action}/{id}
然后
Podcasts/Tagged/{tag}
因为选择了第一条路线,您将获得空值
路线顺序实际上很重要