2016-07-01 6 views
0

AjaxというApiメソッドがあります。解析やその他の必要な作業が終了した後、次の結果が得られます。Json結果のリストをmqc actionresultのパラメータとして使用して、LinqとLambdaを使用してデータベースからオブジェクトを返す

["IG4","E1 ","E16"] 

とすぐに結果が受信され、それはオブジェクトの郵便番号属性は、これらJson結果のいずれかを含むデータベースからのデータを表示する別のMVC ActionResultを呼び出します。しかし、それは動作しません。 ActionResultAjax経由で呼び出され

public ActionResult SearchResult(JsonResult postcode) 
    { 
     var posts = db.Posts.Where(p => p.PostCode.Contains(postcode)); 
     return PartialView("postlist", posts); 

    } 

、私はGetPostcodesWithinメソッドから返さ

SearchResult?postcode%5B%5D=IG4&postcode%5B%5D=E1+&postcode%5B%5D=E16 


$('#searchBtn').on('click', function() { 
     var _postcode = $('#searchPostcode').val(); 
     var _distance = $('#searchDistance').val(); 
     alert("postcode " + _postcode + " distance " + _distance); 
     var _url = '@Url.Action("GetPostcodesWithin", "Api/PostcodeApi")'; // don't hard code url's 
     $.ajax({ 
      type: "GET", 
      url: _url, 
      data: { postcode: _postcode, distance: _distance }, 
      success: function(data) {      
       alert("search ok"); 

       $.ajax({ 
        type: "GET", 
        url: '@Url.Action("SearchResult", "Posts")', 
        data: { postcode: data }, 
        success: function (data) { 
         alert("Post results called"); 
         $("#postList").html(data).show(); 
        }, 
        error: function (reponse) { 
         alert("error : " + reponse); 
        } 
       }); 
      }, 
      error: function (reponse) { 
       alert("error : " + reponse); 
      } 
     }); 
    }); 

Jsonデータが上に渡され、トップ、上に表示されると呼ばれ、次の結果を得ているものurl確認SearchResult

+1

JsonResultの代わりに、string []を使用してみてください。これはすべての値を取得する可能性があります。しかし、あなたのajax投稿が配列を投稿しているようには見えません。 Javascriptも表示できますか? –

+0

あなたはリストにデータを返しますか? – Developer

+0

はい、文字列のリスト – Sugafree

答えて

1

まず、メソッドを

に変更する必要があります。
public ActionResult SearchResult(IEnumerable<string> postcode) 

次にSearchResult()方法で

$.ajax({ 
    type: "GET", 
    url: '@Url.Action("SearchResult", "Posts")', 
    data: { postcode: data }, 
    traditional: true, // add this 
    success: function (data) { 
     .... 
    } 
}) 

にパラメータpostcodeを第二AJAX呼び出しを変更するには、あなたの配列から3文字列値が含まれます。

あなたは今、文字列のコレクションを持っているので、あなたのクエリが今

var posts = db.Posts.Where(p => postcode.Contains(p.PostCode)); 

サイドノートである必要があります:あなたの第二の値にスペースが含まれる("EF ")トリミングする必要があるかもしれませんか?

+0

スティーブンありがとうございます。私は 'traditional:true'という行を追加した後にどのような違いがあるのか​​分かります。しかし、私はまだ 'LinM'コマンドをSearchResult' ActionMethod'でデータベース内のポストを探すことができません。文字列ではなく文字列のリストを探します。 'Contains()'メソッドは 'List 'を引数として取っていないようです。これを回避する方法はありますか? 'Ajax'と' foreach'でリストを分けることができました(リストに3つの項目がある場合)、ActionMethodを3回呼び出します。私はそれが最良の方法だとは思わない – Sugafree

+0

改訂されたクエリの更新を参照してください。 –

+0

次のエラーが表示されます。「インタフェースのインスタンスを作成できません。 'Intellisense'は' IEnumarable 'に' Contains() 'メソッドが含まれていないと言っていたので、プロジェクトを再構築するために' IQueryable 'に変更しなければならず、 – Sugafree

関連する問題