2016-05-07 11 views
0

他の同様の質問を読んでみましたが、私の問題の何かが間違っているかどうかはわかりません。ASP.NET Ajaxがnullを返す

今すぐテキストが正しく取得され
$("#txtSearch").keyup(function() { 
    var x = $("#txtSearch").val(); 

、したがって、「x」は値を持っている:から取得したテキストを送信することになっています

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Search", "Map")', // Map Controller, Search Action 
    data: JSON.stringify({ "Location": x }), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     var table = "<table class='table'>"; 
     $.each(data, function (index, value) { // For each element in data: 
      table += "<tr><td>" + value.title + "</td></tr>"; // add it to the table list 
      var latlng = new google.maps.LatLng(value.latitude, value.longitude); 
      var marker = new google.maps.Marker({ 
       position: latlng, 
       map: map 
      }); 

      gmarkers.push(marker); 
     }); 
     table += "</table>"; 
     $("#myData").html(table); 
    } 
}); 

:私は次のようにAJAX呼び出しを構築しようとしていますそれが提出されたとき。タイトルは、私は本当にそれで何かを行うことはできませんnullのまま限り

[HttpPost] 
public ActionResult Search (string title) 
{ 
    Entities mapEntity = new Entities(); 
    string userId = User.Identity.GetUserId(); 
    var result = mapEntity.Markers.Where(x => x.title.StartsWith(title) && x.UserId == userId).ToList(); 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

:上記のAJAXリクエストが処理されるとしかし、このメソッドはnullパラメータで呼び出されMapController下の検索アクションがあると呼ばれています...この問題を解決するための助けを感謝します。あなたのAJAXリクエストのそれらの2つのパラメータを置き換える

答えて

2

試してみてください。この単純な式と

data: JSON.stringify({ "Location": x }), 
contentType: "application/json; charset=utf-8", 

data: { title: x }, 

お知らせお使いのactionパラメータがtitleと呼ばれているので、それはあなたが送信されなければならないものです。


UPDATE:彼らはJSONでシリアライズできない循環参照が含まれている可能性があるため、

はあなたが取得している500内部サーバーエラーを解決するには、ビューに自分のドメインエンティティを渡して停止します。いつものように、は、ドメインエンティティを投影するビューモデルを使用して、ビューにのみ関連情報が含まれています

ところで
var viewModel = result 
    .Select(x => new 
    { 
     Prop1 = x.SimpleProp1, 
     Prop2 = x.SimpleProp2, 
     Prop3 = x.NestedProp.Prop3, 
    }) 
    .ToList(); 

return Json(viewModel, JsonRequestBehavior.AllowGet); 

、ブラウザのネットワークタブでAJAXリクエストを点検していた場合、あなたはでしょうあなたのサーバーからの応答は、エラーの正確な原因が書き込まれたYSODであることが分かりました。あなたは(私はあなたが見てしなければならない重要な部分を強調している)問題のそれらの種類をデバッグする方法を次の時間を知っているように、

はそれをチェックアウト:

enter image description here

+0

あなたのお勧めは完璧に機能しました!しかし今、行動への復帰はうまくいっていますが、データが正しく返されていません。 500(内部サーバーエラー)と表示されます。私は、そのJsonタイプのデータを返し、その$。各データ(データ、関数(インデックス、値){})で実行しています。それがどうしていいのか? – Ben

+0

http://i.imgur.com/ylM9XcO.pngデバッガ – Ben

+1

で返されるデータを表示するには、ビューモデルを使用している場合、一部のドメインエンティティをビューに戻すことができます。ドメインエンティティには循環参照が含まれている可能性がありますが、明らかにJSONをシリアル化することはできません。だからあなたは500内部サーバーエラーを取得しています。このエラーを解決するには、ドメインエンティティをビューに渡して結果をビューモデルに投影しないようにします。 –

3

をあなたは「場所を探しています"検索メソッドの" title "のパラメータではありません。

データ:JSON.stringify({ "場所":X})

チェックし、 "場所" に "タイトル" からパラメータ名を変更してください。

+1

あなたは場所からタイトルへの変更を意味しませんか? –

+1

検索方法を変更するか、ajax呼び出しメソッドで変更できます。両方の結果が同じです。 @ダリンディミトロフの答えも好むことができます。 – Ronak

+1

それは本当ですはい、あなたの答えは正しいです。それはちょうどあなたの最後の文が間違った方法でパラメータを持っていることです –

関連する問題