Tempdata не очищается, когда я нажимаю стрелку назад из другого действия?

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

//this is my partial view
<div class="row" id="alerts">
<div class="col-lg-12">
    @if (TempData["Success"] != null)
    {
        <div class="alert alert-success alert-dismissable">
            <button type="button" class="close" data-dismiss="alert" aria-
hidden="true">x</button>
            <h4><i class="icon fa fa-ban"></i> Alert!</h4>
            @TempData["Success"]
        </div>

    }
</div>
</div>

//this is my controller
 public ActionResult Add(CreateViewModel objCreate)
    {
        userRepo.AddUser( objCreate);

        TempData["Success"] = "User Added Successfully!";
        return RedirectToAction("Index");    
    }

//this is my view
<div class="col-md-10 col-md-offset-2">
            @Html.Partial("_Alerts")
            @RenderBody()
 </div>

person Anand Shrestha    schedule 06.04.2017    source источник


Ответы (2)


В вашем методе Index вы можете отключить кеширование, используя аннотацию OutputCacheAttribute, подобную этой

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]
public ActionResult Index()
{
    // code of Index()

}
person granit    schedule 06.04.2017
comment
Благодарю вас! это работает нормально, но это все еще хороший способ сделать? - person Anand Shrestha; 06.04.2017
comment
@AnandShrestha, это будет зависеть от ваших потребностей, но приведенный выше пример отключит кэширование для этого конкретного действия, которое происходит, когда вы щелкаете где-то после перенаправления на индекс и нажимаете кнопку «Назад» в браузере. Здесь является соответствующей документацией и другим соответствующий вопрос SO. Надеюсь, поможет. - person granit; 06.04.2017

Я думаю, причина в том, что когда вы возвращаетесь в браузер, он вызывает контроллер и сохраняет значение для TempData["Success"]

Попробуйте это, используя следующий код в вашем контроллере

public ActionResult Add(CreateViewModel objCreate)
{
   if (!IsPostBack){
      userRepo.AddUser( objCreate);
      TempData["Success"] = "User Added Successfully!";
   }
   return RedirectToAction("Index"); 
}
person Thili77    schedule 06.04.2017
comment
Выдает ошибку. Имя «IsPostBack» не существует в текущем контексте. - person Anand Shrestha; 06.04.2017
comment
добавьте ссылки, проверьте это - msdn.microsoft.com/en-us/library/ - person Thili77; 06.04.2017