Возврат нескольких значений для использования в jQuery из WebMethod - PullRequest
1 голос
/ 03 марта 2011

У меня есть jquery, использующий ajax / json для захвата идентификатора элемента, а затем нажимает:

[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, чтобы получить возвращаемые данные и заполнить поля в моей веб-форме, прежде чем показывать форму?

Ответы [ 3 ]

12 голосов
/ 03 марта 2011

Вам нужно будет создать структуру или класс для возврата:

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);
2 голосов
/ 03 марта 2011
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 сторона: Предполагая, что вы используете AJAX-вызов jquery, сделайте что-то вроде этого:

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

Вам нужно будет посмотреть на вывод веб-сервиса напрямую (просто перейдите к нему, как если бы он был веб-страницей), чтобы убедиться, что ваш селектор jQuery правильный.

1 голос
/ 03 марта 2011

Если вы хотите использовать строку, возвращаемую из jquery, попробуйте:

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

msg.d будет содержать строку, которую вы вернете из вызова веб-службы.Если вы хотите вернуть несколько строк, попробуйте добавить предопределенную строку между ними и разбить их в вашей функции успеха jquery.как:

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

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