【发布时间】:2011-11-22 09:05:23
【问题描述】:
在我的项目中,当客户端保存某些内容时,我需要添加功能,即在页面右上角显示信息框。当保存操作重定向到我的解决方案中的另一个页面时,一切正常。
客户端运行保存动作:
[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);
}
}
如果TempData["ActionPopUp"] = "save",我的 Site.Master 运行脚本:
<script type="text/javascript">
$(document).ready(function () {
var test = '<%: TempData["ActionPopUp"] %>';
if (test != '') SaveSuccessPopUp(test);
});
</script>
如前所述,此解决方案工作正常,当控制器进行重定向和 Site.Master 再次加载时,我的问题是,如何将 SaveSuccessPopUp() 函数注入到操作结果中,当 AJAX 调用 Action 并返回一些东西时,怎么办'不重新加载页面并且不运行 Site.Master $(document).ready 代码块。
【问题讨论】:
标签: javascript asp.net-mvc ajax asp.net-mvc-2