Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC使用ajax从javascript函数调用服务器_Javascript_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

ASP.NET MVC使用ajax从javascript函数调用服务器

ASP.NET MVC使用ajax从javascript函数调用服务器,javascript,asp.net,ajax,asp.net-mvc,Javascript,Asp.net,Ajax,Asp.net Mvc,我试图从部分视图中的javascript函数调用控制器中的以下操作方法: [HttpPost] public JsonResult RemoveNotifications(IList<Notification> notifications) { Context.Notifications.RemoveRange(notifications); return new JsonResult(); } [HttpPost] 公共Js

我试图从部分视图中的javascript函数调用控制器中的以下操作方法:

[HttpPost]
    public JsonResult RemoveNotifications(IList<Notification> notifications)
    {
        Context.Notifications.RemoveRange(notifications);
        return new JsonResult();
    }
[HttpPost]
公共JsonResult RemoveNotifications(IList通知)
{
Context.Notifications.RemoveRange(通知);
返回新的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) {
        }
    });
}
功能显示(消息){
消息+=“”
document.getElementById('notifications').innerHTML=message;
$.ajax({
url:'@url.Action(“RemoveNotifications”、“Notification”),
键入:“POST”,
数据:{‘通知’:“@Model.notifications”},
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(数据){
}
});
}
第一部分工作正常,但是$.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
传递到
数据
参数时,它正试图对其进行序列化,以便将其传递给控制器操作。因为javascript不知道如何构造
通知
类,所以这将不起作用

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

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

但是,如果您总是想删除所有通知,只需使用您在第一时间用来填充视图的同一个集合,如上面的注释所述。

@Model.Notifications
将返回一个字符串(类似于
“System.Collections.Generic.IList”
,而不是集合。这有什么意义呢?您已从控制器将集合发送到视图,因此您已经知道它是什么。没有理由将其从视图发送到控制器,只需在
RemoveNotifications()
方法中再次获取相同的集合即可