2014-01-06 32 views
0

我試圖填充一個jQuery UI模式上的webform當有人點擊編輯按鈕與數據從數據庫使用AJAX調用方法getProjectByID()和填充網上形式的模式。我認爲我很接近但肯定缺少一些東西。我基本上想用ProjectID從單擊的行中獲取十列左右的列,然後用JSON返回它們,然後解析JSON並使用表中的列填充模態中相應的文本框。通過使用LINQ和WebMethod ID選擇數據庫中的列

AJAX調用:

var id = $(this).attr('value'); //this is the id of the clicked row 

    $.ajax({ 
     url: "view-requests.aspx/getProjectByID", // Current Page, Method 
     data: JSON.stringify({ id: id }), // parameter map as JSON 
     type: "POST", // data has to be POSTed 
     contentType: "application/json", // posting JSON content  
     dataType: "JSON", // type of data is JSON (must be upper case!) 
     timeout: 10000, // AJAX timeout 
     success: function (result) { 
      //alert(result); 
      $("#txtContactFirstEdit").val(result); 
     }, 
     error: function (xhr, status) { 
      alert(status + " - " + xhr.responseText); 
     } 
    }); 

的WebMethod:

[WebMethod] 
    public static string getProjectByID(int id) 
    { 
     using (dbPSREntities4 myEntities = new dbPSREntities4()) 
     { 
      var thisProject = from tbProject in myEntities.tbProjects.Where(x => x.tbProject == id) // this is not correct but close? 
           select tbProject; 
      return thisProject.ToList(); //no idea how to return it... 
     } 
    } 

在AJAX我要填充的文本框,但是現在我如何解析JSON走出值沒有。

任何幫助,將不勝感激謝謝!

回答

1

首先你的LINQ會工作,但你可以簡單地去掉不必要的部分。在第二,你需要使用一些序列化,例如已經發貨的System.Web程序之一,並把你的數據轉換成JSON:

如果
[WebMethod] 
public static string getProjectByID(int id) 
{ 
    var thisProject = myEntities.tbProjects.Where(x => x.tbProject == id).ToList(); 

    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    var json = serializer.Serialize(thisProject); 

    return json; 
} 

其實你的LINQ查詢應該只返回一個對象,而不是一個集合,你可以做你的JSON更簡單:

var thisProject = myEntities.tbProjects.Where(x => x.tbProject == id).Single(); // or SingleOrDefault - depends on your situation 
... 
var json = serializer.Serialize(thisProject); 

這將給你描述只是項目對象,沒有數組開銷的JSON。

+0

它給我的(x => x.tbProject == ID)說代表系統紅色下劃線的權利。 Func 不帶1個參數。 – user1431633

+0

任何想法爲什麼會發生? – user1431633

+0

@ user1431633,好吧,似乎實際上應該有'tbProjects.Where(x => x.ID == id)'這樣的東西,因爲'x'已經是Project的一個實例。 – Andrei

1

我好的開始,你可以在這裏找到:http://matijabozicevic.com/blog/csharp-net-development/csharp-serialize-object-to-json-format-using-javascriptserialization

,我可以看到你正在試圖對象列表返回到客戶端,但您的WebMethod設置返回一個字符串,對不對?那麼爲什麼不序列化呢?

string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(thisProject); 

return json; 

對我對象的整個列表可以返回給客戶端爲一個數組