【问题标题】:How to organize controller class and action method?如何组织控制器类和动作方法?
【发布时间】:2012-10-13 15:49:28
【问题描述】:

假设我正在开发汽车门户网站。要搜索新车,用户需要提供以下信息:

  • 品牌
  • 型号
  • 模型版本
  • 燃料类型
  • 预算

业务规则:

  1. 如果用户只选择品牌:显示品牌列表页面以及所选品牌的所有型号
  2. 如果用户选择品牌和型号:显示型号列表页面
  3. 如果用户选择品牌 + 型号 + 型号版本:显示型号版本详细信息页面。
  4. 如果用户选择燃料类型或预算:显示品牌列表页面。

现在我有两种方法来定义控制器和动作。

方法一:一个Controller类有多个动作方法

Controller Class : CarSearchmanager
with following are Action Methods:
        - SearchNewCar(int Barnd,int Model.......)
          Depending on user selection this method will redirect control to following  
          action method:

        - BrandListing(int BrandID......)
        - ModelListing(int BrandID,intModelID.....)
        - ModelVersionDetails((int BrandID,intModelID,int ModelVersionID....)

方法二:多控制器类

Controller Class : CarSearchmanager

Following are Action Methods:
        - SearchNewCar(int Barnd,int Model.......)
          Depending on user selection this method will redirect control to following 
          controller action method:

Then I will have separate controller class and action method for each of the pages like 
bellow:

    - BrandListing
    - ModelListing
    - ModelVersionDetails

我很困惑如何组织控制器类和动作方法。是否有任何最佳实践类型的文档?请给我推荐一个。

【问题讨论】:

    标签: asp.net-mvc controller asp.net-mvc-4 actionmethod code-standards


    【解决方案1】:

    我认为没有确定的最佳版本。以一种让您感觉更干净和更有条理的方式定义它。根据我对您的要求的理解,我可以这样定义

    品牌控制器

    动作方法

    • ListForFuleAndBudget(string fuelType,string budget)
    • List(string brandName)

    模型控制器

    动作方法

    • List(string brand,string model)
    • Details(string brand, string model, string version)

    现在,如果您想要漂亮的 url,而您不想要操作方法名称,(例如:details)您可以在通用路由定义之前在 global.asax 中注册路由时定义漂亮的 url。

    routes.MapRoute("list", "model/{brand}/{model}",
                   new { controller = "brand", action = "List");
    
    routes.MapRoute("list", "model/{brand}/{model}/{version}",
                   new { controller = "brand", action = "details");
    
    //default route definition goes here
    

    现在yoursitename/model/honda/camry 会将用户带到list 操作方法和 yoursitename/model/honda/camry/lx 会将他们带到details 操作方法。

    【讨论】:

      【解决方案2】:

      我的建议是把它放在同一个控制器中 由于这是将使用的搜索功能 在类似的情况下。使用方法重载和在 相应的方法返回特定的视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-24
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 2011-11-26
        • 1970-01-01
        相关资源
        最近更新 更多