1

我正在一个有 4 个独立部分的网站上工作,每个部分都有自己的控制器。这些控制器共享一些模型,但是模型会根据调用它的控制器略有不同。

我想遵循的路线是{controller}/{model}/{id}/{action}我可以使用controller1/cars/5/edit而不是controller1/editcar/5.

有什么方法可以让我的控制器理解模型+动作组合并使用不同的 ActionResults 处理它们,还是我被迫在模型名称上使用 ActionResult 然后使用条件来确定要采取的动作?

在 Ruby 中,我可以使用get "/controller1/cars/:id/edit" do. 我只是在 MVC4 中寻找类似的东西。

示例路线:

  • /controller1/cars
    • (返回一个包含来自 controller1 的所有汽车的视图)
  • /controller1/cars/5
    • (从 controller1 返回一个包含 ID 为 5 的汽车的视图)
  • /controller1/cars/5/edit
    • (返回视图以从控制器 1 编辑 ID 为 5 的汽车)
  • /controller2/cars
    • (返回一个包含来自 controller2 的所有汽车的视图)
  • /controller2/boats
    • (返回一个包含来自控制器 2 的所有船的视图)
4

2 回答 2

1

我认为这条路线可以满足您的需求。它需要您的操作方法中有一些巧妙的逻辑,但应该为您提供处理它的工具。阅读我对行为的描述。

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{model}/{id}/{action}", // URL with parameters
            new { controller = "Home", action = "View", id = UrlParameter.Optional } // Parameter defaults
        );
  • 此路由将默认为一个名为 View 的操作(可能用于显示),并且可以选择指向不同的操作。
  • Model并将id作为参数传递给您的操作方法。不幸的是,模型不会作为类型发送,而是作为字符串发送(您可以将其输入到工厂类中)。
  • 如果 if 被忽略(例如/controller2/boats),它将作为 null 传递给您的操作。这需要处理逻辑,但为您提供处理它的工具。
于 2013-02-13T17:25:07.610 回答
0

感谢您的回复。我在这方面遇到这么多麻烦的原因是因为我无法弄清楚如何正确地将控制器与溃败分开。这导致我的想法脱离了 MVC 标准,几乎试图实现控制器的控制器。

当我最终偶然发现“区域”时,我很快意识到这就是我所需要的。我能够为我网站的每个部分(或区域)添加一个区域,并且在每个区域内,我可以定义单独的控制器和视图,而我的模型保留在所有区域之外的共享目录中。这现在完美无缺。

于 2013-02-15T16:53:44.067 回答