【问题标题】:500 error with knockout delete500 错误与淘汰赛删除
【发布时间】:2016-05-27 21:12:30
【问题描述】:

当我尝试使用 ajax 删除列表中的项目时收到 500 错误。

在结合 Fiddler 使用 Chrome 上的控制台时,Id 上的空引用就是问题所在。通过 Chrome 的控制台调试显示,公告对象确实有一个 Id。

我的印象是 500 个错误来自服务器,但我在它调用的函数路径上有一个断点并且没有被命中。

关于为什么将announcement.Id设置为null,有什么让我眼前一亮的事情吗?

控制者:

public JsonResult DeleteAnnouncement(int Id)
        {
            if(repository.DeleteAnnouncement(Id))
            {
                return Json(repository.GetAllAnnouncements(), JsonRequestBehavior.AllowGet);
            }
            return Json(null);
        }

存储库:

public bool DeleteAnnouncement(int Id)
        {
            var model = (from a in db.DbAnnouncement
                                     where a.Id == Id
                                     select a).SingleOrDefault();
            if (model.Id != 0)
            {
                db.DbAnnouncement.Remove(model);
                db.SaveChanges();
                return true;
            }
            else
            {
                return false;
            }
        }

js 脚本:

<script type="text/javascript">
        function AnnouncementViewModel() {
            //Make the self as 'this' reference
            var self = this;
            //Declare observable which will be bind with UI
            self.Id = ko.observable("");
            self.Title = ko.observable("");
            self.Details = ko.observable("");
            self.DTCreated = ko.observable("");
            self.LastUpdated = ko.observable("");
            self.CreatedUser = ko.observable("");
            self.UpdatedUser = ko.observable("");
            self.VersionNum = ko.observable("");
            self.StartDT = ko.observable("");
            self.ExpiryDT = ko.observable("");
            self.Enabled = ko.observable("");
            self.GroupID = ko.observable("");
            self.URLLink = ko.observable("");

            var Announcement = {
                Id: self.Id,
                Title: self.Title,
                Details: self.Details,
                DTCreated: self.DTCreated,
                LastUpdated: self.LastUpdated,
                CreatedUser: self.CreatedUser,
                UpdatedUser: self.UpdatedUser,
                VersionNum: self.VersionNum,
                StartDT: self.StartDT,
                ExpiryDT: self.ExpiryDT,
                Enabled: self.Enabled,
                GroupID: self.GroupID,
                URLLink: self.URLLink
            };

            self.Announcement = ko.observable();
            self.Announcements = ko.observableArray(); // list of announcements

            // Delete announcement
            self.delete = function (Announcement) {
                if (confirm('Are you sure to Delete "' + Announcement.Title + '"?')) {
                    $.ajax({
                        url: '@Url.Action("DeleteAnnouncement","Announcement")',
                        cache: false,
                        type: 'POST',
                        contentType: 'application/json; charset=utf-8',
                        //data: ko.toJSON(Announcement.Id),
                        data: {Id: Announcement.Id},
                        success: function (data) {
                            self.Announcements.remove(Announcement);
                            alert("Record Deleted Successfully");
                        }
                    }).fail(
                    function (xhr, textStatus, err) {
                        alert(err);
                    });
                }
            }


        }
        $(document).ready(function () {
            var viewModel = new AnnouncementViewModel();
            ko.applyBindings(viewModel);
        });

【问题讨论】:

    标签: javascript ajax asp.net-mvc knockout.js


    【解决方案1】:

    您正在使用 ajax contentType 作为 Json,但并没有真正将 json 对象发送到服务器。使用

    data: JSON.stringify({ Id: Announcement.Id() }),
    

    并用 [HttpPost] 装饰你的 mvc 操作

    [HttpPost]
    public JsonResult DeleteAnnouncement(int Id)
    {}
    

    【讨论】:

    • 抱歉,不在办公桌前。是的,stringify 比我用data: '{"Id":"' + Announcement.Id + '"}', 解决的好,谢谢你的解释! =)
    猜你喜欢
    • 2013-06-19
    • 2015-07-17
    • 2012-07-20
    • 2016-03-15
    • 2015-07-16
    • 1970-01-01
    • 2012-01-30
    • 2013-10-31
    • 2014-06-19
    相关资源
    最近更新 更多