В моем проекте мне нужно добавить функциональность, которая показывает инфобокс в правом верхнем углу страницы, когда клиент что-то сохраняет. Все отлично работает, когда операция сохранения перенаправить на другую страницу в моем решении.
Действие запуска клиента при сохранении:
[SaveAction] //my own action filter to show info box
public ActionResult Details(int id, FormCollection form)
{
var pojazd = PojazdRepo.GetById(id);;
if (UpdateAndSave(pojazd, form))
{
return RedirectToAction("Index");
}
else
{
return View(GetDetailsViewModel(id, true));
}
}
Теперь мой тест фильтра действий, что ModelState.IsValid
истинно, затем добавьте что-то в TempData:
public class SaveActionAttribute : ActionFilterAttribute
{
private bool test;
private bool isAjax;
public override void OnActionExecuted(ActionExecutedContext ctx)
{
test = ctx.Controller.ViewData.ModelState.IsValid;
isAjax = ctx.HttpContext.Request.IsAjaxRequest();
base.OnActionExecuted(ctx);
}
public override void OnResultExecuting(ResultExecutingContext ctx)
{
if (test)
{
if (isAjax) ctx.Controller.TempData["ActionPopUp"] = "";
else ctx.Controller.TempData["ActionPopUp"] = "save";
}
base.OnResultExecuting(ctx);
}
}
И мой Site.Master запускает скрипт, если TempData["ActionPopUp"] = "save"
:
<script type="text/javascript">
$(document).ready(function () {
var test = '<%: TempData["ActionPopUp"] %>';
if (test != '') SaveSuccessPopUp(test);
});
</script>
Как уже упоминалось, это решение работает нормально, когда контроллер делает Redirect и Site.Master загружается снова, моя проблема в том, как вставить функцию SaveSuccessPopUp () в результат действия, когда Action вызывается AJAX и что-то возвращать перезагрузите страницу и не запускайте Site.Master $(document).ready
кодовый блок.