我一直试图在用户调用控制器中的操作时收到通知。这适用于我的大多数操作,但是我使用Ajax.ActionLink
来删除我的项目,因此页面没有刷新,并且没有调用javascript函数,因此通知没有显示。
在我的_Layout
页面中,我有如下所示的通知系统:
<script type="text/javascript">
//Used to display and close the system notifications
$(document).ready(function notify() {
$("#NotificationBox").show("slide", { direction: "down" }, 1000);
if ($("#NotificationAutoHide").val() == "true") {
$("#NotificationBox").delay(5000).hide("slide", { direction: "down" }, 1000);
}
});
</script>
<div id="NotificationDiv">
@if (TempData["Notification"] != null)
{
@Html.Hidden("NotificationAutoHide", TempData["NotificationAutoHide"])
<div id="NotificationBox" class="@TempData["NotificationCSS"]" style="display: none">
@TempData["Notification"]
</div>
}
</div>
在我的Index
视图(使用布局页面)中,我有Ajax ActionLink
在我的控制器中调用我的Delete
操作,该操作还会填充所需的TempData
属性
@Ajax.ActionLink("Delete", "Delete", "MyController",
new { id = item.UserID },
new AjaxOptions {
HttpMethod = "Delete",
OnBegin = "JSONDeleteFile_OnBegin",
OnComplete = "notify"
},
new { @class = "delete-link" })
我想通过在notify
中的OnComplete
选项中添加对ActionLink
函数的调用,然后一切都会起作用,但不幸的是,这似乎不起作用。
我已经看到一些示例建议从我的控制器中通过TempData
发送JsonResult
,但是我不确定如何将其与现有代码联系起来。 (我的控制器已经返回一个JsonResult对象用于其他用途)
有人可以帮助我从Ajax电话回来TempData
并执行我的通知系统吗?
非常感谢你的时间。
答案 0 :(得分:0)
由于TempData是服务器端代码,我认为不可能。您应该通过JsonResult返回此信息。
示例:
public JsonResult Delete(int id) { //do stuff return Json(new {param1 = "what you need", param2 = "more info"}, JsonRequestBehavior.AllowGet); }
答案 1 :(得分:0)
确保您的notify
函数是公开可见的,以便您可以从AJAX成功回调中调用它:
<script type="text/javascript">
function notify() {
$("#NotificationBox").show("slide", { direction: "down" }, 1000);
if ($("#NotificationAutoHide").val() == "true") {
$("#NotificationBox").delay(5000).hide("slide", { direction: "down" }, 1000);
}
}
$(document).ready(notify);
</script>
您声明notify
函数的方式使得无法从外部范围调用此函数:
$(document).ready(function notify() { ... });
我甚至不知道这是否是有效的javascript语法。从未见过有人使用它。