2010-11-25 14 views
1

我的控制器有抽象的基礎控制器。我想訪問抽象基類構造函數中的表單發佈數據。我們怎麼做到這一點?在asp.net mvc 2:如何訪問任何控制器的構造函數內的http post數據

public abstract class AppController : Controller 
{ 
    public AppController() 
    { 
     // request post data required here 
    } 
} 

public class ProductController : AppController 
{ 
    public ProductController() { } 
} 

目的:在更改第一個下拉列表時更新第二個下拉列表。兩者都在MASTER頁面上。上面給出

代碼是的2個選項之一將數據傳遞到主頁:

  1. 添加在所有的動作方法,使用的ViewData。
  2. 使用抽象基本控制器只在一個地方做它 - 在其構造函數中使用ViewData添加所需的數據,並使我們的主控制器類實現這個抽象基本控制器類。這樣我們就不必爲所有操作方法中的母版頁面添加viewdata。
+0

爲什麼你做的構造收集表格後?這簡直是​​愚蠢的。它可能會在應用程序初始化時運行一次,但那時您在該時刻發佈的機會有多少。使用ActionResults進行任何形式的後期操作。期! – Gup3rSuR4c 2010-11-26 01:59:42

回答

2

我不知道你最終的目標是什麼,但這是不推薦在MVC中完成的。 Request對象尚未在控制器的構造函數中初始化。您可以嘗試使用本地HttpContext對象:

string foo = System.Web.HttpContext.Current.Request["foo"]; 

但是這件事情非常糟糕,我決不會建議你像現在這樣您的控制器連接到靜態本地HttpContext實例沒有測試它單元的任何機會。

而不是使用構造函數,你可以重寫你的控制器的Initialize方法,你將有機會獲得請求上下文,你可以閱讀發佈的數據:

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 
    string foo = requestContext.HttpContext.Request["foo"]; 
} 
+0

非常感謝Darin,重載Initialize工作!僅供參考 - 我只是在問題中添加了我的目的。 – Avi 2010-11-26 12:27:19

相關問題