![](/img/trans.png)
[英]Calling server side function with parameter from Javascript in ASP.NET
[英]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.