ASP.NET MVC - Как получить доступ к данным Сессии в местах кроме Контроллера и Представлений

Имея опечатку , вместо :, вы используете сокращенные имена свойств .

Итак, ваш литерал объекта эквивалентен:

{
    posts: postReducers,
    stationsReducer: stationsReducer,
    trackCircuitReducer: trackCircuitReducer,
    trackCircuitReducer: trackCircuitReducer,
}

Из MDN :

Строгий режим до Gecko 34 требует, чтобы все свойства с именем в буквальном объекте быть уникальным. Обычный код может дублировать имена свойств, причем последний определяет значение свойства. Но поскольку только последний ничего не делает, дублирование - это просто вектор ошибок, если код изменяется для изменения значения свойства, отличного от изменения последнего экземпляра. Двойные имена свойств являются синтаксической ошибкой в ​​строгом режиме.

blockquote>

(Примечание: это больше не относится к ECMAScript 2015 )

Вы можете упростить свой литерал до:

export const rootReducer = combineReducers({
    posts: postReducers,
    stationsReducer,
    trackCircuitReducer
})

23
задан Svetlozar Angelov 19 December 2009 в 07:51
поделиться

4 ответа

Я бы использовал внедрение зависимостей и передавал экземпляр HttpContext (или просто сеанс) классу, который нуждается доступ к сессии. Другой альтернативой является ссылка на HttpContext.Current, но это усложнит тестирование, поскольку это статический объект.

   public ActionResult MyAction()
   {

       var foo = new Foo( this.HttpContext );
       ...
   }


   public class Foo
   {
        private HttpContextBase Context { get; set; }

        public Foo( HttpContextBase context )
        {
            this.Context = context;
        }

        public void Bar()
        {
            var value = this.Context.Session["barKey"];
            ...
        }
   }
33
ответ дан 29 November 2019 в 01:16
поделиться

You just need to call it through the HttpContext like so:

HttpContext.Current.Session["MyValue"] = "Something";
24
ответ дан 29 November 2019 в 01:16
поделиться

Haven't done it myself, but this sample from Chad Meyer's blog might help (from this post: http://www.chadmyers.com/Blog/archive/2007/11/30/asp.net-webforms-and-mvc-in-the-same-project.aspx)

[ControllerAction]
public void Edit(int id)
{
    IHttpSessionState session = HttpContext.Session;

    if (session["LoggedIn"] == null || ((bool)session["LoggedIn"] != true))
        RenderView("NotLoggedIn");

    Product p = SomeFancyDataAccess.GetProductByID(id);

    RenderView("Edit", p);
}
0
ответ дан 29 November 2019 в 01:16
поделиться

I would also wrap all session variables into a single class file. That way you can use intelliSense to select them. This cuts down on the number of paces in code where you need to specify the "strings" for the session.

0
ответ дан 29 November 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: