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吗?或者更好的是,知道正确的方法!谢谢