【问题标题】:Anyway to have an action be anything in the RouteConfig in MVC and not having to specify a specific one?无论如何,要在 MVC 的 RouteConfig 中进行任何操作,而不必指定特定的操作?
【发布时间】:2016-02-17 22:51:20
【问题描述】:

所以我有一个可以容纳大约 10 个动作的控制器。每个动作/视图只是简单地保存一个图像。我想要做的是将参数发送到每个操作的 URL(该参数对每个操作执行相同的操作)。

routes.MapRoute(
                name: "MyRoute",
                url: "MyController/{action}/{myparameter}",
                defaults: new { controller = "MyController", action = "CanIMakeThisBeAnything", myparameter = UrlParameter.Optional }
            );

无论如何我可以在控制器中的任何操作中执行操作,这样我就不必指定 10 条不同的路线?

【问题讨论】:

  • 你的行为是什么样的?
  • 我完全不清楚为什么你认为你需要 10 条不同的路线。您在上面的代码中指定的唯一操作是默认操作。
  • 您是否遇到某种错误?从您的问题来看,我同意@James R ...看起来您不需要对路线做任何事情。
  • 是的,听起来您只是对路线的工作方式感到困惑。 action 参数只是在未指定任何内容的情况下的默认值(即/MyController/。如果您将用户发送到 URL /MyController/Foo/,它将触发Foo 操作,尽管您为action 设置了什么。
  • "action 参数只是一个默认值" Ahhhhhh这就是我错了。我认为该操作必须是控制器的特定操作。这更有意义。基本上,这个想法是对于每个动作,我都会返回一个带有不同图像的视图。所以这看起来像“MyController/action”。对于每个操作,我都需要 URL 中的另一个参数(是正确的短语吗?),我可以在我的代码中抓取和使用......即“MyController/action/parameter”@ChrisPratt

标签: c# asp.net-mvc asp.net-mvc-4 routing routes


【解决方案1】:

如果我正确理解你的 cmets,你想让路线看起来像:

        routes.MapRoute("MyRoute", "{controller}/{action}/{myparameter}",
            new 
            { 
                controller = "My",
                action = "CanIMakeThisBeAnything", 
                myparameter = UrlParameter.Optional
            });

而您的操作如下:

public ActionResult YesYouCanMakeThisAnything(string myparameter)
{
    ...
    return View(...);
}

因此,如果有人导航到 yourwebapp/My/YesYouCanMakeThisAnything/abc123,那么它将调用上述操作,并且 myparameter 将等于“abc123”。

如果有人简单地导航到 yourwebapp,那么它会在控制器“MyController”(也在您的默认值中为route) 并且 myparameter 将等于 null(因为它没有默认值并且是可选的)。

【讨论】:

  • 这是一个令人困惑的答案,我认为它不能清楚地回答提问者的问题。我对这个答案的解读是,“不,我不明白你的问题。”提问者问的是“是否必须指定路线映射的‘动作’部分?” - 这个问题没有明确回答。
猜你喜欢
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 2020-09-23
相关资源
最近更新 更多