2013-12-10 4 views
1

Я работаю с asp MVC 4. У меня есть один контроллер, и я хочу разделить один и тот же объект между его функциями. Я думал о члене данных, но он не работает. Вот мой код:Как передать объект между функциями одного и того же контроллера?

public class MyController : Controller 
{ 
    public MyObject obj; 

    public ActionResult Index() 
    { 
     obj = new MyObject(); 
     this.obj.GetData();   // Fill my object 
     return View(); 
    } 

    public ActionResult MyFunction() 
    { 
     Console.Write(this.obj);  // Always null 
     return View(); 
    } 
} 

Возможно ли сохранить этот объект между функциями? Я использовал для создания данных TempData ou ViewBags, но я не уверен, что это правильный способ управления большими объектами.

+0

Каждый раз, когда пользователь запрашивает страницу для другого контроллера действия, воссоздается. Вы можете использовать Session для обмена переменными между одними пользовательскими вызовами и базами данных или кешами для совместного использования значения между несколькими пользователями. – FLCL

ответ

2

Это null, потому что среда MVC создает новый контроллер для обработки различных запросов, поэтому obj также отличается.

Если вы создаете свой объект singleton или просто статируете его, он будет работать.

public static MyObject obj; 
+0

Спасибо, я не думал о статике, кажется очевидным сейчас :) – Alex

+0

Будет ли это охватывать разные сеансы пользователя? Это не кажется безопасным. – rhughes

+0

@rhuges: Это не отличается для сеансов пользователей. Если мы хотим это сделать, мы можем перезаписать asp.net MVC IoC framework для пользовательских сеансов :) –

0

Попробуйте это:

public class MyController : Controller 
{ 
    public MyObject obj = new MyObject(); 

    public ActionResult Index() 
    { 
     this.obj.GetData();   // Fill my object 
     return View(); 
    } 

    public ActionResult MyFunction() 
    { 
     Console.Write(this.obj);  // Always null 
     return View(); 
    } 
} 

Это остановит вашу ошибку null.

Если вы хотите сохранить данные между postbacks, вам нужно будет искать постоянное хранилище данных, такое как база данных на базе SQL.

+0

Он останавливает мою нулевую ошибку, но obj пуст. Я исправляю эту проблему со статическим членом данных (cf: @ Hiệp Lê). – Alex

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