繁体   English   中英

带有ajax的javascript函数的ASP.NET MVC调用服务器

[英]ASP.NET MVC calling server from javascript function with ajax

我正在尝试从部分视图中的javascript函数中调用控制器中的以下action方法:

[HttpPost]
    public JsonResult RemoveNotifications(IList<Notification> notifications)
    {
        Context.Notifications.RemoveRange(notifications);
        return new JsonResult();
    }

这是应该从视图调用服务器的函数:

function show(message) {
    message += "</ul>"
    document.getElementById('notifications').innerHTML = message;
    $.ajax({
        url: '@Url.Action("RemoveNotifications", "Notification")',
        type: 'POST',
        data: { 'notifications': "@Model.Notifications" },
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        success: function (data) {
        }
    });
}

第一部分工作正常,但是$ .ajax部分没有任何作用。 我还在视图顶部添加了以下内容:

<script src="TandForum.dk/Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="TandForum.dk/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="TandForum.dk/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>

当您将@Model.Notifications传递给data参数时,它会尝试对其进行序列化,以便可以将其传递给控制器​​操作。 由于javascript不了解您的Notification类的构造方式,因此将无法正常工作。

如果您需要指定要删除的通知,则最好将通知ID的集合传递给操作,例如,如果您的Notification类具有名为Id int类型的属性,则您的方法将变为:

public JsonResult RemoveNotifications(IEnumerable<int> notificationIds)
{
    Context.Notifications.RemoveAll(n => notificationIds.Contains(n.Id));
    return new JsonResult();
}

但是,如果您始终要删除所有通知,请使用与最初填充视图相同的集合,如上面的注释所述。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM