C# 使用LINQ和WebMethod按ID选择数据库中的列
我试图在jQueryUI模式上填充一个webform,这时有人用AJAX调用getProjectByID()方法并在该模式上填充来自数据库的数据单击编辑按钮。我想我很接近了,但肯定错过了一些东西。我基本上想用projectd从单击的行中获取10个左右的列,用JSON返回它们,然后解析JSON,并用表中的列填充模式中相应的文本框 AJAX调用:C# 使用LINQ和WebMethod按ID选择数据库中的列,c#,asp.net,ajax,json,linq,C#,Asp.net,Ajax,Json,Linq,我试图在jQueryUI模式上填充一个webform,这时有人用AJAX调用getProjectByID()方法并在该模式上填充来自数据库的数据单击编辑按钮。我想我很接近了,但肯定错过了一些东西。我基本上想用projectd从单击的行中获取10个左右的列,用JSON返回它们,然后解析JSON,并用表中的列填充模式中相应的文本框 AJAX调用: var id = $(this).attr('value'); //this is the id of the clicked row $.aj
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以获取值
在此方面的任何帮助都将不胜感激,谢谢 首先,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,而不需要数组开销。我是一个很好的开端,您可以在这里找到: 正如我所看到的,您试图将对象列表返回给客户端,但您的WebMethod设置为返回字符串,对吗?那么为什么不序列化它呢
string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(thisProject);
return json;
对我来说,正确的方法是将整个对象列表作为数组返回给客户端它在(x=>x.tbProject==id)处给我一个红色下划线,表示委托系统.Func不接受1个参数。知道为什么会发生这种情况吗?@user1431633,看起来实际上应该有类似
tbProjects.Where(x=>x.id==id)的东西
,因为x
已经是项目的一个实例。