MVC3 Ajax ActionLink,在使用TempData完成时调用javascript函数

MVC3 Ajax ActionLink,在使用TempData完成时调用javascript函数,javascript,ajax,json,asp.net-mvc-3,Javascript,Ajax,Json,Asp.net Mvc 3,我一直在尝试获取一个通知,当用户在我的控制器中调用某个操作时显示该通知。这适用于我的大多数操作,但是我使用Ajax.ActionLink删除我的项目,因此页面不会刷新,javascript函数也不会调用,因此通知不会显示 在我的\u布局页面中,我有如下所示的通知系统: <script type="text/javascript"> //Used to display and close the system notifications $(document).read

我一直在尝试获取一个通知,当用户在我的控制器中调用某个操作时显示该通知。这适用于我的大多数操作,但是我使用
Ajax.ActionLink
删除我的项目,因此页面不会刷新,javascript函数也不会调用,因此通知不会显示

在我的
\u布局
页面中,我有如下所示的通知系统:

<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>
我想通过在
ActionLink
中的
OnComplete
选项中添加对
notify
函数的调用,一切都会正常工作,但不幸的是,这似乎不起作用

我看到一些示例建议从conntroller通过
JsonResult
发送
TempData
,但是我不确定如何将其与现有代码绑定。(我的控制器已经返回一个JsonResult对象用于其他用途)

有人能帮我从Ajax调用中获取
TempData
并执行我的通知系统吗


非常感谢您抽出时间。

由于TempData是一个服务器端代码,我认为这是不可能的。您应该通过JsonResult返回此信息

例如:

public JsonResult Delete(int id) { //do stuff return Json(new {param1 = "what you need", param2 = "more info"}, JsonRequestBehavior.AllowGet); } public JsonResult Delete(int-id) { //做事 返回Json(新的{param1=“您需要什么”,param2=“更多信息”},JsonRequestBehavior.AllowGet); }
由于TempData是一个服务器端代码,我认为这是不可能的。您应该通过JsonResult返回此信息

例如:

public JsonResult Delete(int id) { //do stuff return Json(new {param1 = "what you need", param2 = "more info"}, JsonRequestBehavior.AllowGet); } public JsonResult Delete(int-id) { //做事 返回Json(新的{param1=“您需要什么”,param2=“更多信息”},JsonRequestBehavior.AllowGet); }
确保您的
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>

我甚至不知道这是否是有效的javascript语法。从未见过有人使用它。

确保您的
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>

我甚至不知道这是否是有效的javascript语法。从未见过有人使用它。

这是否意味着我必须从所有控制器方法返回json?我不知道这是否可行,因为其他方法需要返回视图。不,只有删除操作。您将继续返回的其他视图在这种情况下,是否可以从Json返回向TempData添加值?否则,我将不得不将这些值放在其他地方,并修改通知系统以从TempData读取数据,如果该值为null,则修改这些其他变量。你可能看不出我对这一切都很陌生!谢谢。因为您是使用Ajax发布的,所以当操作返回Json时,您的tempdata将为空。您必须通过JsonResult返回所需的数据,或者您必须重新加载页面(但您将错过Ajax的好处),看看这些示例,看看是否有帮助:这是否意味着我必须从所有控制器方法返回json?我不知道这是否可行,因为其他方法需要返回视图。不,只有删除操作。您将继续返回的其他视图在这种情况下,是否可以从Json返回向TempData添加值?否则,我将不得不将这些值放在其他地方,并修改通知系统以从TempData读取数据,如果该值为null,则修改这些其他变量。你可能看不出我对这一切都很陌生!谢谢。因为您是使用Ajax发布的,所以当操作返回Json时,您的tempdata将为空。您必须通过JsonResult返回所需的数据,或者您必须重新加载页面(但您将错过Ajax的好处)看看这些示例,看看是否有帮助:我实际上从web上的一个示例中获得了这段代码,但我在一些示例中看到了它的使用。然而,我对这一切都很陌生,所以我不知道什么是好的做法或不是!稍后我将更新代码以尝试此操作。您知道如何使用我的Json结果中的值填充TempData吗?或者更好的是,知道正确的方法!谢谢。我实际上是从网上的一个例子中得到这段代码的,但是我在一些例子中看到了它的使用。然而,我对这一切都很陌生,所以我不知道什么是好的做法或不是!稍后我将更新代码以尝试此操作。您知道如何使用我的Json结果中的值填充TempData吗?或者更好的是,知道正确的方法!谢谢