2015-01-21 2 views
-1

Этот вопрос может показаться глупым, но я новичок в asp.net mvc и не могу найти ответ на свой вопрос. В моем приложении (игре) у меня есть модель игры GameModel (она содержит многомерный массив). Я хочу, чтобы иметь возможность использовать один и тот же объект в каждом контроллере, который я использую. Поэтому я создаю его один раз и после этого использую его в каждой функции контроллера. В принципе есть один вид, и все остальные функции контроллера редактируют объект с функциями модели.MVC5 сохранить объект во всех функциях

Моей идеей был помещен объект в переменную сеанса, чтобы функция проверки проверяла переменную сеанса, если объект не установлен, задает объект. Но это не выглядит логично для меня, надеюсь, у кого-то есть лучшее решение.

+0

Итак, ваша фактическая проблема в том, что сеанс не хранит ваш объект? Вам нужно положить какой-то код или никто не сможет вам помочь. – DLeh

+0

Нет, моя проблема в том, что я не знаю, как правильно пройти объект. моя идея состояла в том, чтобы сделать это с сеансом, но это безумие. –

ответ

3

В соответствии с вашим вопросом вы хотите отслеживать данные пользователя (данные игры).

Сохранение GameModel в переменной Session имеет смысл для этого сценария.

Если вы видите, что вы вызываете эту переменную сеанса из большого количества мест, вы можете создать базовый контроллер и сохранить его там. Затем наследуйте от него все контроллеры.

Например,

public class BaseController : Controller 
{ 
    public GameModel CurrentGameModel 
    { 
     get 
     { 
      var model = Session["GameModel"] as GameModel; 
      if (model == null) 
      { 
       model = new GameModel(); 
       Session["GameModel"] = model; 
      } 
      return model; 
     } 
     set { Session["GameModel"] = value; } 
    } 
} 

public class HomeController : BaseController 
{ 
} 

Примечание: Вы должны иметь в виду, что если Пул приложений перерабатывает или Application врезается все данные, хранящиеся в переменной сессии будут потеряны.

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

+0

Является ли это также разумным решением, если я хочу иметь возможность редактировать GameModel в сеансе с функциями в моем контроллере? –

+0

Мой первый выбор будет хранить данные в базе данных. Тем не менее, сохранение в переменной Session также приемлемо. * (Если вы получаете доступ к этим данным почти по каждому запросу, нет смысла хранить в ** скрытом поле **. ** Singleton ** большой нет нет для этого сценария.) * – Win

+0

Как мне запускать функции на объект? i tryd GameModel myGame = (GameModel) Сессия ["GameModel"]; ViewBag.test = GameModel.stringGetValue(); в моей функции в HomeController, но он терпит неудачу. –

1

Я не понимаю, почему вы не думаете, что сеанс выглядит хорошо. Цель состоит в том, чтобы точно хранить данные для каждого пользователя в нескольких запросах.

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

И, наконец, вы можете использовать статическое свойство класса. Статические свойства в ASP.NET поддерживаются в течение жизненного цикла приложения и отображаются одинаково для всех пользователей. Значение, если пользователь что-то там пишет, другой пользователь может его прочитать. Вы можете распределять данные для каждого пользователя с помощью Dictionary<>, хотя ключ является идентификатором пользователя.

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