从WebMethod返回要在jQuery中使用的多个值

时间:2011-03-03 19:09:22

标签: c# jquery asp.net ajax webmethod

我有jquery使用ajax / json来获取元素ID,然后点击:

[System.Web.Services.WebMethod]
public static string EditPage(string nodeID)
{
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(Global.conString))
    using (SqlCommand cmd = new SqlCommand("contentPageGetDetail", con))
    {
        cmd.Parameters.Add("@ID", SqlDbType.UniqueIdentifier).Value = Global.SafeSqlLiteral(nodeID, 1);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.ExecuteNonQuery();
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            da.Fill(dt);
        }
    }
    if (dt.Count > 0)
    {
      string pageTitle = dt.Rows[0]["Title"].toString();
      string contentID = dt.Rows[0]["ContentID"].toString();
      return pageTitle, contentID, nodeID;
    }
    else
    {
      return "Failed";
    }
}

当需要返回时,我想从存储过程返回的所有内容返回到成功部分中的jquery方法,并在文本字段中设置隐藏字段,下拉值和标题。

在jQuery中我尝试使用“pageTitle”,但它未定义。我需要做什么jQuery方面来获取返回的内容并在显示表单之前填充Web表单中的字段?

3 个答案:

答案 0 :(得分:12)

您需要创建一个结构或类来返回:

public struct TheStruct 
{ 
    public string pageTitle; 
    public int contentID, 
    public int nodeID; 
}

[System.Web.Services.WebMethod]
public static TheStruct EditPage(string nodeID)
{
    <your code here>

    var result = new TheStruct();
    result.pageTitle = "Test";
    result.contentID = 1;
    return result;
}

如果你通过:

 contentType: "application/json; charset=utf-8",

在AJAX调用中,您将获得一个JSON回复,您可以解析它:

var obj = jQuery.parseJSON(webserviceReply);
alert(obj.pageTitle);

答案 1 :(得分:2)

public class stuff {
string pagetitle;
string contentID;
string nodeID; 
}
[System.Web.Services.WebMethod]
public static stuff EditPage(string nodeID) {
... get the stuff
   stuff returnme = new stuff();
   returnme.pagetitle = ...
   returnme.contentid = ...
   return returnme;
}

==== jquery方: 假设您正在使用jquery的AJAX调用,请执行以下操作:

.ajax({ type: "GET", url: "./return.asmx", async: true, dataType: "xml",
                success: function (respons, status) {
 $(respons).find("WebServiceCallName stuff pagetitle").text();
}});

您需要直接查看webservice输出(只是导航到它就像是一个网页),以确保您的jQuery选择器是正确的。

答案 2 :(得分:1)

如果要使用从jquery返回的字符串,请尝试:

success: function(msg) {
    alert(msg.d);
}

msg.d将保存您从webservice调用返回的字符串。如果要返回多个字符串,请尝试在它们之间添加预定义字符串,并在jquery成功函数中将它们拆分。像:

 yourfirststring||@@||yoursecondstring||@@||yourthirdstring

 var strings = msg.d.split("||@@||");