2015-04-05 117 views
-1

我已經創建了一個基本控制器,其中我的兩個其他控制器來源於,以避免代碼重複。如何知道我需要哪個RedirectToAction?

2這些控制器中的ActionResult是大約80行和79行是相同的。唯一的區別是ActionResult結尾的重定向動作。

我的問題是:有沒有辦法知道需要調用哪個RedirectToAction,即我們需要返回哪個控制器?

+0

「2 ActionResult's in these controllers」意味着方法在派生控制器中。但是你後來在基礎控制器中發表的評論。請將您在基本控制器和派生控制器中具有的功能列出,以便清楚明確,而且我們不必猜測。 – AaronLS 2015-04-05 00:37:00

+0

我改了一個字,現在以粗體顯示。希望現在清楚:)我在派生控制器中使用了這些方法,現在它們在基本控制器中。 – Forza 2015-04-05 01:14:25

+0

「現在他們在基礎控制器中」該信息不在您的問題中。您聲明派生控制器中有兩種方法,並且您不會說基本控制器中的內容。 – AaronLS 2015-04-05 04:00:22

回答

2

首先,避免使用基礎控制器,除非您絕對需要它們。他們傾向於成爲垃圾分享的東西,最終你會得到很多隻適用於你的控制器的東西,因爲它更容易。

這是最好的使它成爲一個不使用它們的政策,只有當你絕對必須做出例外。

除此之外,控制器真的應該是精益。如果你的控制器是80行代碼,它告訴我你在控制器中做業務邏輯。您應該可以在業務層中使用該邏輯。更重要的是,你可能違反了單一責任原則。

通過利用輔助類,可以在沒有基礎控制器的情況下實現相同的結果。例如,你可以做這樣的事情:

public static class MyHelper 
{ 
    public static Foo DoSomething() { return new Foo(); } 
} 

public class MyController1 : Controller 
{ 
    public ActionResult Index() 
    { 
     var result = MyHelper.DoSomething(); 
     return File(...); 
    } 
} 

public class MyController2 : Controller 
{ 
    public ActionResult Index() 
    { 
     var result = MyHelper.DoSomething(); 
     return JSON(...); 
    } 
} 
1

不是直接,您可以檢查模型中的某些情況,並將重定向包裹在if的周圍。或者,添加查詢字符串參數:

public ActionResult MyAction(MyModel model, string actionRedirect = null) 
+0

在基礎控制器中調用ActionResult的方法也在基礎控制器:)所以我沒有辦法改變查詢字符串參數..任何方法來解決這個問題? – Forza 2015-04-05 00:22:24

+0

這個想法是,我可以使用該actionRedirect參數來創建一個if語句並選擇適當的重定向操作 – Forza 2015-04-05 00:23:00