【问题标题】:500 Internal server error when executing Ajax执行 Ajax 时出现 500 内部服务器错误
【发布时间】:2014-03-19 15:44:00
【问题描述】:

我有一个 JS 脚本:

$(document).ready(function () {
    $('.z').on('click', function (event) {
        event.preventDefault();
        $.ajax({
            url: "/DeviceUsage/Edit",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            headers: {
                'RequestVerificationToken': '@TokenHeaderValue()'
            },
            data: JSON.stringify({
                deviceusage: {
                    DeviceInstanceId: $('.a').children("#DeviceInstanceId").val(),
                    UserId: $('.a').children('#UserId').val(),
                    storageId: $('.a').children('#storageId').val()

                }
            }),
            error: function (data) {
                alert("wystąpił nieokreślony błąd " + data);
            },
            success: function (data) {
                alert(data.newurl);
                if (data.ok) {
                    $("#Modal").modal('hide');
                    window.location = data.newurl;
                }
                else {
                    $('.modal-body').html(data);
                }
            }
        })
    })
@functions{
    public string TokenHeaderValue()
    {
        string cookieToken, formToken;
        AntiForgery.GetTokens(null, out cookieToken, out formToken);
        return cookieToken + ":" + formToken;
    }
}
});

还有一个方法在 DeviceUsage 控制器中:

[HttpPost]
    [AdminAuthorization]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include="StorageId,UserId,DeviceInstanceId")] DeviceUsage deviceusage)
    {
        if (deviceusage.UserId == 6 && deviceusage.StorageId==3)
        {
            ModelState.AddModelError("", "Zarezerwowane urządzenie nie moze byc przypisane do biurka");
        }
        if(deviceusage.UserId==1 && deviceusage.StorageId==3)
        {
            ModelState.AddModelError("", "Wolne urządzenie nie może przebywać na jakimś biurku");
        }
        if((deviceusage.UserId!=1 & deviceusage.UserId!=6)&deviceusage.StorageId!=3)
        {
            ModelState.AddModelError("", "Urzązenie przypisane do kogos nie moze przebywac w magazynie");
        }
        if (ModelState.IsValid)
        {

            unitOfWork.deviceUsageRepository.Update(deviceusage);
            unitOfWork.Save();
            return Json(new { ok = true, newurl = Url.Action("Index") });
        }
        ViewBag.DeviceInstanceId = new SelectList(unitOfWork.deviceInstanceRepository.Get(), "Id", "SerialNo", deviceusage.DeviceInstanceId);
        ViewBag.StorageId = new SelectList(unitOfWork.storageRepository.Get(), "Id", "Name", deviceusage.StorageId);
        var data = unitOfWork.userRepository.Get()
        .Select(s => new
        {
            Id = s.Id,
            Credentials = s.Name + " " + s.Surname
        }
        );
        ViewBag.UserId = new SelectList(data, "Id", "Credentials", deviceusage.UserId);
        return PartialView(deviceusage);
    }

我试图在 C# 方法的开头放置一个断点,但它从未被击中,因此错误必须在其他地方。你能告诉我我做错了什么吗?

【问题讨论】:

  • url 应该是 url: "/DeviceUsage/Create"
  • 我粘贴了错误的函数:X
  • 您还可以使用 chrome inspector、fiddler 或 firebug 进行调试,以查看正在传递的参数以及将自定义错误设置为关闭时的实际响应。

标签: c# jquery ajax asp.net-mvc


【解决方案1】:

我猜这两个属性中的任何一个都限制了访问该函数。

[AdminAuthorization]
[ValidateAntiForgeryToken]

删除它并尝试一次。

【讨论】:

  • 你是对的。 ValidateAntiForgeryToken 导致问题。为了使它工作,我需要注释掉这个属性。
【解决方案2】:

500 Internal server error 通常表示您调用的页面中存在致命错误 (/DeviceUsage/Edit)

您可以尝试使用页面中设置的变量手动运行页面,而不是发布它们。

【讨论】:

  • 我知道。手动测试什么都不给我,因为这个 ajax 调用在模式窗口中。所以手动运行它不会给我任何东西
猜你喜欢
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
相关资源
最近更新 更多