【问题标题】:Do I need a new controller for this?我需要一个新的控制器吗?
【发布时间】:2017-04-19 04:38:53
【问题描述】:

我有一个 PropertyController,我用它来服务一堆页面。比如……

/Property
/Property/{id}
/Property/add
/property/edit/{id}

我现在需要根据一个特定的属性做很多事情,我需要像这样提供页面:

/Property/{id}/images/add
/Property/{id}/images/edit/{id}
/Property/{id}/rooms/add
/Property/{id}/rooms/edit/{id}

我想我需要构建一个新的 ImagesController 和 RoomsController,但是我需要把它们放在一个文件夹结构中吗?我的 RouteConfig 当前设置为默认 MapRoute 规则 ({controller}/{action}/{id}

【问题讨论】:

    标签: asp.net-mvc model-view-controller controller routes


    【解决方案1】:

    您无需在文件夹结构中反映您的路由结构。

    看看这个: ASP.Net MVC support for Nested Resources?.

    实际上,您的路由字符串是一个正则表达式,用于匹配来自请求者的任何内容。如果匹配,它会尝试将表达式中的所有变量绑定到来自 HTTP 请求的值。

    关于创建新控制器 - 经验法则是为每个资源/业务实体创建一个控制器。所以在你的情况下,我会同意 ImagesController、RoomsController 和 PropertyController。

    【讨论】:

    • 谢谢,这似乎是有道理的。尽管只是对其进行了测试,但我似乎仍然可以通过旧格式和新格式使用这些路线。 /images 和 /property/1234/images。应该是这样吗?
    • /images 成功了,因为您定义了默认的 /controller/action。在从查询字符串中解析时,我们可以将控制器名称继承为 ImagesController。如果您不希望它可用,则必须更改默认路线
    猜你喜欢
    • 2017-07-05
    • 2016-02-16
    • 2012-01-12
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    相关资源
    最近更新 更多