2013-03-16 56 views
1

我是新來的並使用ASP.NET,MVC3和AJAX。AJAX調用返回ASP.NET MV3項目中的Interal Server錯誤

我嘗試通過AJAX調用在我的控制器中調用一個方法,但收到一個內部服務器錯誤。

這裏是我的Javascript方法:

function DeleteItem(id) { 
    var answer = confirm("Are you sure ?") 
    if(answer) { 
    $.ajax({ 
     type: 'POST', 
     url: '/Item/Delete', 
     data: id, 
     dataType: 'json', 
     success: function (data) { 
     alert('Function called'); 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
     alert(xhr.status); 
     alert(thrownError); 
     } 
    }); 
    } 
} 

,這裏是我在我的控制器方法:

public ActionResult Delete(int idItem) { 
    Item.Delete(idItem); //delete my item 
    return RedirectToAction("Index", "Item"); 
} 

JavaScript方法被調用,但是當我回答「是的,我敢肯定,我想刪除「,我得到一個內部服務器錯誤,我不知道爲什麼。什麼導致服務器錯誤?

+0

'Item.Delete(idItem);'應該是'Item.DeleteItem(idItem);'你不覺得? – 2013-03-16 13:55:09

+0

考慮如何在你的MVC的行動來處理錯誤: http://stackoverflow.com/questions/5995776/error-handling-in-asp-net-mvc-3 – 2013-03-16 14:02:40

回答

1

我的猜測是你得到一個內部服務器的原因是因爲你傳入的int的名稱與你在控制器中所期望的int不匹配。因此,idItem很可能是空的,這會在刪除時導致內部服務器錯誤。

更改數據來匹配

function DeleteItem(id) { 
    var answer = confirm("Are you sure ?") 
    if (answer) { 
     $.ajax({ 
      type: 'POST', 
      url: '/Item/Delete', 
      data: { idItem: id}, 
      dataType: 'json', 
      success: function (data) { 
       alert('Function called'); 
      }, 
      error: function (xhr, ajaxOptions, thrownError) { 
        alert(xhr.status); 
        alert(thrownError); 
      } 
     }); 
    } 
} 
+0

[HttpPost]丟失了,並且我沒有在ajax調用的「數據」域中匹配id和idItem 非常感謝你們! – AlexB 2013-03-16 18:04:35

+0

@AlexB很高興它爲你工作! – 2013-03-16 18:21:30

0

您的ActionResult方法沒有[HttpPost]屬性。您的Ajax調用屬於'POST'類型。

+0

爲什麼這將防止調用了這個動作GET請求,它不會導致錯誤。 – 2013-03-16 13:59:37

+0

@ scott.korin,請參閱編輯 – Oliver 2013-03-16 14:01:13

+0

是的,但HttpPost是一個操作過濾器。 POST不需要工作。它可以防止使用GET,PUT等調用動作。 – 2013-03-16 14:06:51

0

也許你需要序列化你傳遞給JSON格式的動作id。而且您還需要使用[HttpPost]屬性修飾您的操作方法,以便它接受POST動詞。