В моем приложении я создал базовый контроллер. Все остальные контроллеры происходят от BaseController
public class BaseController : Controller
{
//
// GET: /Base/
public void Warning(string message)
{
TempData.Add(Alerts.WARNING, message);
}
public void Success(string message)
{
TempData.Add(Alerts.SUCCESS, message);
}
public void Information(string message)
{
TempData.Add(Alerts.INFORMATION, message);
}
public void Error(string message)
{
TempData.Add(Alerts.ERROR, message);
}
}
Нет, если я получу любой другой контроллер от BaseController
, это возможно сделать
public ActionResult Test()
{
Success("This is a success Alert");
}
Теперь в _alert partial view
я проверяю временные данные и гроулю их с помощью Toastr.
_предупреждает частичный просмотр
@if (TempData.ContainsKey(Alerts.SUCCESS))
{
foreach (var value in TempData.Values)
{
<script>
toastr.success("@value.ToString()");
</script>
}
}
@if (TempData.ContainsKey(Alerts.ERROR))
{
foreach (var value in TempData.Values)
{
<script>
toastr.error("@value.ToString()");
</script>
}
}
@if (TempData.ContainsKey(Alerts.INFORMATION))
{
foreach (var value in TempData.Values)
{
<script>
toastr.warning("@value.ToString()");
</script>
}
}
@if (TempData.ContainsKey(Alerts.WARNING))
{
foreach (var value in TempData.Values)
{
<script>
toastr.warning("@value.ToString()");
</script>
}
}
этот _alert
частичный вид отображается в моем _layout
виде. Что является основным макетом приложения.
Все все страницы используют этот макет.
Проблема:
Проблема, с которой я сталкиваюсь, заключается в том, что после отправки сообщения с контроллера, например:
Success("This is a success message");
Я получаю хорошее сообщение в браузере. Но каждый раз, когда я перехожу на следующую страницу, я получаю одно и то же сообщение, так как оно все еще остается в моем TempData
.
Что я могу сделать, чтобы решить эту проблему?
Вероятно, мне нужно очистить временные данные, но где?
Я попытался очистить TempData от просмотра: но это не позволяет мне. Я получаю сообщение об ошибке в браузере, говорящее, что я могу выполнять только назначение, увеличение, уменьшение и создание объекта и тому подобное, но не TempData.Clear();
. Кроме того, было бы неплохо выполнить очистку TempData на стороне клиента, не так ли?