2014-11-03 73 views
0

请标明为重复 - Its already answered here是否有可能在MVC4中有一个名为action的参数?

是否有可能有一个在MVC4命名的动作参数?

尝试这样做会导致参数返回控制器操作的名称而不是参数值。

/Somecontroller/Someaction?action=value 

当我尝试访问参数动作时,我得到“Someaction”作为结果而不是“value”。

尝试将参数绑定到其他名称也无济于事。

public ActionResult Someaction([Bind(Prefix = "action")] String id) 

编辑:我还没有在保留的MVC关键字中找到'Action'/'action'。

+0

尝试@前缀工作:http://stackoverflow.com/questions/1185782/map-asp-net-mvc-action-parameter-名称与其他名称 – 2014-11-03 12:16:04

+0

这样做没有什么区别。 – 2014-11-03 12:21:29

+2

[MVC 5未设置参数名称为“action”为传递值]的可能重复(http://stackoverflow.com/questions/25013997/mvc-5-not-setting-parameter-named-action-to-passed-value ) – demoncodemonkey 2014-11-03 12:39:48

回答

0

我没有测试过这一点,但我会假设你可以尝试改变你的缺省路由的网址,以比其他行动的东西

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

routes.MapRoute("Default", "{controller}/{cAction}/{id}", 
    new { controller = "Home", cAction = "Index", id = UrlParameter.Optional }); 

那么这应该让你在Action中将动作用作参数。我不确定你为什么想要这样做,我可能会建立一个接受我的动作的路由网址,并将其构建为类似于以下网址的一部分:

/SomeController/SomeAction/value其中value是您的“动作”参数。

编辑基于评论:

我成功地创建了去一个aspx url'd路线

routes.MapRoute(null, "third-party.aspx", new { controller = "Home", action = "Index" }); 

显然,你可以添加你想在这里的任何控制器/行动,并在那里你的路线要处理它,那么你通过/third-party.aspx?action=value访问路线,它似乎为我

+0

这不起作用并导致出现异常“System.InvalidOperationException:RouteData必须包含名为'action'的项目,其中包含非空字符串值。”我问这个问题的原因是因为我有一个第三方应用程序,它通过名为action的参数重定向到我的程序。我不确定如何在MVC中优雅地处理它。 – 2014-11-03 14:24:45

+0

就像我说过的,我不确定它是否会真正起作用,因为按照惯例,行动是保留的,但是认为它可能值得试图覆盖它。让我尝试一下,然后在另一个可能的选项 – 2014-11-03 14:34:17

+0

上对我的答案进行编辑,以帮助您解决问题 – 2014-11-03 14:43:48

相关问题