2010-11-25 3 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 внутри своего конструктора и сделайте наш основной класс контроллера реализованным этим абстрактным базовым классом контроллера. Так что нам не нужно добавлять данные для главной страницы во все методы действий.
+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

Большое спасибо Дарин, перегрузка Инициализация работала! FYI - я просто добавил свою цель в вопросе. – Avi 2010-11-26 12:27:19

Смежные вопросы