使用LINQ和WebMethod按ID在数据库中选择列

时间:2014-01-06 19:27:58

标签: c# asp.net ajax json linq

我尝试在jQuery UI模式上填充webform,当有人使用AJAX从数据库中点击数据编辑按钮来调用方法getProjectByID()并在模态上填充webform时。我觉得我很接近,但肯定错过了一些东西。我基本上想要从带有ProjectID的单击行获取十个左右的列,使用JSON返回它们然后解析JSON并使用表中的列填充模态中的相应文本框。

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以获取值。

对此的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分: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,而不会产生数组开销。

答案 1 :(得分: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;

对我来说,权利可以将整个对象列表作为数组返回给客户端