2015-11-12 2 views
0

Почему я не получаю никакого вывода из этого кода, если ниже него добавить @{ Session.Remove("errors"); }Удаление переменной сеанса с точки зрения

  @if (Session["errors"] != null) 
      { 

       <div class="alert alert-danger"> 
        <ul> 
         @{ 
          String[] errors = (String[])Session["errors"]; 
         } 
         @foreach (String error in errors) 
         { 
          <li>@error</li> 
         } 
        </ul> 
       </div> 
      } 

      @if (Session["success"] != null) 
      { 
       <div class="alert alert-success"> 
        @Session["success"] 
       </div> 
      } 

ли код первого получить оценку, а затем выводится, но даже тогда это не имеет никакого смысла. Без @{ Session.Remove("errors"); } Я получаю вывод с ним, ничего не очень раздражает.

Попытка выполнить FLASH-сообщения, которые сохраняются только для текущего запроса.

Обновлен:

 TempData["errors"] = new String[] { "You need to be logged in to access this page." }; 

Вид:

 @if (TempData.ContainsKey("errors")) 
     { 

      <div class="alert alert-danger"> 
       <ul> 
        @{ 
         String[] errors = (String[])TempData["errors"]; 
        } 
        @foreach (String error in errors) 
        { 
         <li>@error</li> 
        } 
       </ul> 
      </div> 
     } 

     @if (TempData.ContainsKey("success")) 
     { 
      <div class="alert alert-success"> 
       @TempData["success"] 
      </div> 
     } 
+0

Не то, что я просил. –

ответ

3

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

Возможно, вы, вероятно, ищете TempData, который предназначен именно так, как вы хотите.

Значение TempData сохраняется , пока он не будет считан или до сессии тайм-аут. Сохранение TempData таким образом позволяет использовать сценарии, такие как перенаправление , поскольку значения в TempData доступны за одним запросом .

Это хорошо работает для сообщений и предупреждений, так как вы можете перенаправить на другую страницу (например, недопустимые причины доступа) и по-прежнему сохраняете это сообщение до загрузки следующей страницы.

+0

Оказывается, он не работает точно. Посмотрите на мой обновленный код в моем фильтре ActionExecuting, который я установил TempData ["errors"] Если я выгружаю их в View, используя System.Diagnostic.Debug, они передаются в View, удаляя эту строку, ошибки никогда не выводятся. –