2011-03-06 44 views
0

是否有可能根據請求中的參數數量來重載操作方法?asp.net中參數數量的超載操作mvc

例如:

1. domain.com/List/Filter/ByName 調用 - >public ActionResult Filter(string criteria1)

2. domain.com/List/Filter/ByName/ByRanking 調用 - >public ActionResult Filter(string criteria1, string criteria2)

我使用asp.net MVC2。

+0

不確定但在您的ActionResult方法中,您可以以編程方式調用其他ActionResult方法。我做了很多。 – CarneyCode 2011-03-06 08:56:28

回答

1

如果我沒有弄錯,最好的方法是添加兩個不同的控制器方法,並將它們映射到兩個不同的Url。

public ActionResult Filter1(string criteria1); 

public ActionResult Filter2(string criteria1, criteria2); 

那麼有兩種途徑定義:

這將這個URL List/Filter/xxCriteria/映射到第一控制器

routes.MapRoute(
      "Filter",            // Route name 
      "{controller}/Filter/{criteria1}",       // URL with parameters 
      new { controller = "List", action = "Filter1", criteria="" } // Parameter defaults 
     ); 

這將這個URL List/Filter/xxCriteriaName/xxxCriteriaRank映射到第二控制器。如果沒有這條路你仍然可以映射一個URL到第二個方法,但它看起來像:List/Filter/?criteria1=xx&criteria2=xx

routes.MapRoute(
      "Filter2",            // Route name 
      "{controller}/Filter/{criteria1}/{criteria2}",       // URL with parameters 
      new { controller = "List", action = "Filter2", criteria1 = "", criteria2 = "" } // Parameter defaults 
     ); 

希望它幫助。

+0

哎呦:餵我不是故意使用重載,而是使用兩種不同的過濾方法。編輯這個問題! = P – gideon 2011-03-06 09:09:26

+0

我在其中一個網址中找不到資源,但第二個網址正常工作。可能是什麼問題呢? – maX 2011-03-06 09:51:53

+0

@maxxxee啊,它只是網址應該是'{criteria1}'我忘了** 1 **見我的編輯歷史。在答案中改變了它。 – gideon 2011-03-06 10:04:50

3

根據參數不能重載操作方法,因爲沒有合理的方法可以將URL消歧爲多個重載方法。

可以做什麼,但要麼是這樣的:

public ActionResult Filter(string criteria1, string criteria2) 

,然後檢查是否criteria2爲空只有名稱進行篩選。

或者,您可以使用ActionNameAttribute來裝飾你的動作方法

[ActionName("FilterByName")] 
public ActionResult Filter(string criteria1) 

[ActionName("FilterByNameAndRanking")] 
public ActionResult Filter(string criteria1, string criteria2) 

,然後在路線註冊使用該名稱。然而,這種方法會導致很多混亂。

+1

+1好啊,不知道那個屬性。 – gideon 2011-03-06 09:07:04

+0

如何不同於具有單獨動作名稱 即是這樣的: 心不是上述相同具有2層不同的動作的方法,如 公共的ActionResult FilterByName(串標準1) 公共的ActionResult FilterByNameAndRanking(串標準1,串criteria2) – maX 2011-03-06 09:22:53