2014-03-19 74 views
1

時,我有一個JS腳本:500內部服務器錯誤執行阿賈克斯

$(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#的開始方法,但它從來沒有命中,所以錯誤必須在其他地方。你能告訴我我做錯了什麼嗎?

+0

url應該是網址:「/ DeviceUsage/Create」 –

+0

我粘貼了錯誤的函數:X – szpic

+1

另外你還可以使用chrome inspector,fiddler或者firebug進行調試,以查看傳遞了什麼參數以及設置自定義時的實際響應錯誤關閉。 – gaurav

回答

3

我想這兩個屬性中的任何一個限制訪問函數。

[AdminAuthorization] 
[ValidateAntiForgeryToken] 

刪除它並嘗試一次。

+0

你是對的。 'ValidateAntiForgeryToken'會導致問題。爲了使它工作,我需要註釋掉這個屬性。 – szpic

0

500內部服務器錯誤通常意味着在頁面中的致命錯誤,你叫(/ DeviceUsage /編輯)

你可以嘗試手動在頁面設置張貼替代變量運行頁面。

+0

我知道。手動測試並不給我什麼,因爲這個Ajax調用是在模態窗口中。所以手動運行它不會給我什麼 – szpic