ASP.NET MVC使用ajax从javascript函数调用服务器
我试图从部分视图中的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
[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()
方法中再次获取相同的集合即可