2016-07-01 37 views
0

有一種Api方法,通過Ajax調用。解析和其他必要的事情完成後,我得到以下結果。使用Json結果列表作爲mvc actionresult的參數,使用Linq和Lambda從數據庫返回對象

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

一旦收到該結果,調用另一個MVC ActionResult從數據庫,其中,所述對象的屬性郵政編碼包含這些Json結果中的一個顯示數據。但它不起作用。

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

    } 

ActionResult通過Ajax叫,我查是被稱爲什麼url,得到了以下結果

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); 
      } 
     }); 
    }); 
GetPostcodesWithin方法返回

Json數據顯示在頂部,這是傳遞到SearchResult

+1

而不是JsonResult,嘗試使用字符串[],可能會拿起所有的值。但是,它看起來不像你的ajax文章發佈數組。你可以顯示JavaScript嗎? –

+0

你是否在列表中返回數據? – Developer

+0

是的,字符串列表 – Sugafree

回答

1

您首先需要將方法更改爲

public ActionResult SearchResult(IEnumerable<string> postcode) 

然後,第二AJAX調用改變

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

參數postcodeSearchResult()方法然後將從你的陣列包含3個字符串值。

因爲你現在有一個字符串的集合,查詢現在需要

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

旁註:你的第二個值包含空格("EF "),這可能需要修剪?

+0

謝謝Stephen。我確實看到在添加「traditional:true」這一行之後它有什麼不同。但是我仍然無法在SearchResult ActionMethod中獲得'Linq'命令來查找數據庫中的Posts,包含任何字符串列表,而不僅僅是一個字符串。 'Contains()'方法似乎沒有把'List '作爲參數。有沒有辦法解決?我可以在'Ajax'和'foreach'中分開列表(如果列表中有3個項目),它將會調用'ActionMethod'三次。我認爲這不是最好的方法 – Sugafree

+0

查看修訂查詢的更新。 –

+0

我收到以下錯誤:無法創建接口的實例。 '也'intellisense'說'IEnumarable '不包含'Contains()'方法,所以我不得不將它改成'IQueryable '爲了重建項目並且仍然有這個錯誤。 – Sugafree

相關問題