2014-02-13 53 views
0

當我試圖保存一個對象時,我總是收到錯誤500(內部服務器錯誤)。我似乎無法找到任何方法來檢查確切的錯誤可能是什麼。500(內部服務器錯誤)ASP.Net MVC 5 c#

我想通過API控制器保存對象,然後在完成時返回對象。我可以返回一個字符串,並且錯誤消失,我相信我可以找到一種方法來爲我做這件事,但這似乎是修復一個簡單問題的骯髒方法。

該對象保存得很好,它只是在它通過我的控制器運行後繼續拋出該錯誤。

這是我的API調用:

self.postCategory = function (data) { 
return $.ajax({ 
    url: '/API/Category/', 
    type: 'POST', 
    dataType: 'json', 
    data: ko.toJSON(data), 
    contentType: 'application/json; charset=urf-8', 
    success: function (data) { 
     self.getAlert('sucessfully saved category', 1); 
     self.Category(data); 
    }, 
    error: function (error) { 
     self.getAlert(error, 4); 
    } 
}); 
} 

這是處理呼叫的控制:

public Category Post([FromBody]Category category) 
{ 
using (MyContainer db = new MyContainer()) 
{ 
    if (db.Categories.Where(n => n.Id == category.Id).Any()) 
    { 
     db.Categories.Attach(category); 
     db.Entry<Category>(category).State = EntityState.Modified; 
    } 
    else 
    { 
     db.Categories.Add(category); 
    } 
    try 
    { 
     db.SaveChanges(); 
     return category; 
    } 
    catch (Exception e) 
    { 
     Elmah.ErrorSignal.FromCurrentContext().Raise(e); 
     return new Category(); 
    } 
} 
} 

這似乎只發生在類別在一到與之相關的記錄多種關係。沒有相關記錄的新類別或類別更新不會有同樣的問題。

這對我來說已經沒有意義了。

任何幫助將不勝感激!

謝謝!

+0

您正在使用Elmah,但您尚未共享錯誤日誌。 Elmah說什麼? –

+0

Elmah無話可說,因爲它通過了我的嘗試。 該代碼有效,但無論出於何種原因,它都會返回該錯誤。 – arucker

回答

0

問題在於我的淘汰賽結合。

此:

function CategoryModel(data) { 
    var self = this; 

    self.Id = data.Id; 
    self.Name = ko.observable(data.Name); 

    self.Products = ko.observableArray([]); 
} 

本來應該是這樣的:

function CategoryModel(data) { 
    var self = this; 

    self.Id = data.Id; 
    self.Name = ko.observable(data.Name); 

    self.ProductModels = ko.observableArray([]); 
} 

在我的.edmx我被默認命名我的實體產品和類別之間的關聯。然後,當我打電話時,它會發送帶有產品的類別,對該類別進行更新,然後使用複雜對象返回該類別。這對webapi不利,因此500錯誤。

解決方案:將您的observableArray字面上的名稱命名爲ANYTHING,而不是與關聯名稱相同。

感謝您的幫助!