2016-11-10 102 views
0

我只是想發送一個簡單的模型回我的控制器來更新一個對象。出於某種原因,這是在逃避我。爲什麼我的發佈方法不能擊中控制器?

控制器的方法:

[Authorize(Roles = Enums.Roles.SiteAdmin)] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "BuildingId,Name")] Building building) 
    { 
     if (ModelState.IsValid) 
     { 
      service.Update(building); 
      return Json(new { Status = "Success!" }); 
     } 

     return Json(new { Status = "error." }); 
    } 

EF型號:

public class Building 
{ 
    [Key()] 
    public int BuildingId { get; set; } 

    [Required()] 
    [MaxLength(200)] 
    public string Name { get; set; } 

    public virtual ICollection<Room> Rooms { get; set; } 
} 

的Javascript POST方法:

$('.saveOnBlur').on('blur', function (e) { 
     var newBuildingName = $(this).prop("innerText"); 
     var editBuildingId = $(this).siblings('.hiddenId').children().first().val(); 

     var modifiedBuilding = { BuildingId: Number(editBuildingId), Name: newBuildingName }; 

     $.ajax({ 
      url: "/Equipment/Buildings/Edit", 
      type: 'POST', 
      contentType: 'application/json', 
      data: { building: JSON.stringify(modifiedBuilding) } 
     }); 
    }) 

我不知道我做錯了。我能夠使用非常類似的方法創建對象,但是這個代碼甚至沒有命中控制器方法,我立即得到一個內部錯誤500(不是404)。有任何想法嗎?

+0

您能提供您收到的錯誤消息嗎? – Dabbas

+0

@Dabbas從F12工具的控制檯:jquery-2.1.3.min.js:4 POST http:// localhost:55698/Equipment/Buildings/Edit 500(內部服務器錯誤) –

+0

沒有其他任何反應 –

回答

1

您將不得不進行調試。它可能是ValidateAntiForgeryToken,如果你沒有提供有效的值,它會在它到達你的代碼之前停止。我沒有看到任何包含http頭中的值的JavaScript代碼。

要對其進行註釋並查看它是否符合該方法。如果不嘗試使用您的授權過濾器的下一個過濾器,並查看是否導致您的代碼不被執行。

如果你已經有處理通過ajax發送的令牌的代碼,如果不是,那麼很多以前的問題都有很好的答案,它們描述了你如何做到這一點,比如創建一個修改後的ValidateAntiForgeryTokenAttribute,它從http頭。


其他的事情來檢查。

  1. 變化的數據有效載荷data: JSON.stringify(modifiedBuilding)
  2. 檢查你的路線以及/Equipment/Buildings/Edit。您可以在問題中提供路由配置,以使其更容易。
+0

把他們兩個都解決不了。 :/ –

+0

@eddie_cat - 將數據載荷更改爲data:JSON.stringify(modifiedBuilding) – Igor

+0

@eddie_cat - 並檢查您的路線以及/ Equipment/Buildings/Edit。您可以在問題中提供路由配置,以使其更容易。 – Igor

0

我幾次遭受同樣的錯誤。

一般來說,當您在控制器啓動時沒有碰到斷點的情況下發生500錯誤時,在請求路由到您的控制器之前,某些內容會失敗。

主要嫌疑人爲:

1 - 路由配置錯誤。因此,500發生,因爲你沒有對參數的適當途徑

2 - 型號不接受空數據,因此它被傳遞給你的控制器之前,你的數據解析失敗

3 - 一個自定義過濾器失敗

相關問題