在我的项目中,我需要添加功能,在客户端保存内容时在页面的右上角显示信息框。当保存操作重定向到我的解决方案中的另一个页面时,一切正常。
客户端运行保存操作:
[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()函数注入动作结果,当AJAX调用Action并返回某些内容时,请问重新加载页面,不要运行Site.Master $(document).ready
代码块。
答案 0 :(得分:0)
好问题。
您可能需要在此处使用部分视图。我的意思是,如果您的请求是ajax请求,请再次附加TempData
,TempData
将在部分视图内输出。
如何将该部分视图输出作为html块发送?
我有一篇关于如何将部分视图作为字符串发送的博客文章。主题是不同的,但你会得到这个想法:
以下是一个例子:
[HttpPost]
public ActionResult toogleIsDone(int itemId) {
//Getting the item according to itemId param
var model = _entities.ToDoTBs.FirstOrDefault(x => x.ToDoItemID == itemId);
//toggling the IsDone property
model.IsDone = !model.IsDone;
//Making the change on the db and saving
ObjectStateEntry osmEntry = _entities.ObjectStateManager.GetObjectStateEntry(model);
osmEntry.ChangeState(EntityState.Modified);
_entities.SaveChanges();
var updatedModel = _entities.ToDoTBs;
//returning the new template as json result
return Json(new { data = this.RenderPartialViewToString("_ToDoDBListPartial", updatedModel) });
}
RenderPartialViewToString
是控制器扩展。你可以从下面的链接找到完整的代码:
将html重新放回客户端代码后,将其附加到DOM并对其进行处理。动画,显示/隐藏它,随心所欲地做任何事情