2016-11-10 5 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をポストする方法:私は私が間違ってやっているのか分からない

$('.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コードは表示されません。

トラブルシューティングするには、コメントアウトしてメソッドにヒットするかどうかを確認します。もしそうでなければ、あなたの認証フィルターである次のフィルターを試して、あなたのコードが実行されていないかどうか確認してください。

あなたがHTTPからそれを読み込んで修正ValidateAntiForgeryTokenAttributeを作成することで、同じようにそれを行うことができますどのように記述するように良い答えと前回の質問が多いではない場合、あなたはすでに、AJAX偉大経由で送信されたトークンを処理するコードをお持ちの場合ヘッダ。


その他の事項を確認してください。

  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 - モデルがnullデータを受け付けていませんので、それはあなたのコントローラに渡される前に、データの解析に失敗した

3 - Aカスタムフィルタが失敗しています

関連する問題