wake-up-neo.com

Json-Objekt von Asp.net webMethod an den Ajax-Aufruf zurücksenden

Ich habe folgende Ajax-Aufrufmethode und die asp.net-Webmethode.

Meine asp.net-Funktion gibt einige Werte zurück, die ich im Ajax-Aufruf brauche.

Ich habe viele Dinge ausprobiert, aber es ist mir noch nicht gelungen.

AJAX CALL

<script type="text/javascript">


        $(document).ready(function () {
            // Add the page method call as an onclick handler for the control.
            $("#<%=ddlEmailTemplate.ClientID%>").change(function () {
                debugger;
                var myparam = $("#<%=ddlEmailTemplate.ClientID%>").val(); //id name for dropdown list
                $.ajax({
                    type: "POST",
                    url: "FileTax.aspx/ddlEmailTemplate_SelectedIndexChanged",
                    data: '{param:"' + myparam + '"}',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        alert(data.d)
                    }
                });
            });
        });
    </script>

WebMethod asp.net  

Nach Ihrer Antwort aktualisiert

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = false)]
    public static string ddlEmailTemplate_SelectedIndexChanged(string param)
    {
        string subject;
        string Description;
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ForMyTaxConnectionString"].ConnectionString))
        {
            con.Open();
            DataSet ds = new DataSet();
            using (SqlCommand cmd = new SqlCommand())
            {

                cmd.Connection = con;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "Spo_ShowEmailTemplateContent";
                cmd.Parameters.Add(new SqlParameter("@Tid", SqlDbType.Int)).Value = Convert.ToInt32(param);
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                    con.Close();
                    da.Dispose();
                }
                if (ds.Tables[0].Rows.Count > 0)
                {
                    DataRow dr = ds.Tables[0].Rows[0];

                    subject = Convert.ToString(dr["TemplateSubject"]);
                    Description = Convert.ToString(dr["TemplateDescription"]);

                }
            }

        }

        return JsonConvert.SerializeObject(new { subject = subject, description = Description });
        // return subject ;
5
serious coder

Include using Newtonsoft.Json;

CS

public string CheckDetails(string param1, string param2)
{
  var chk = new check
  {
    subject = "hello! " +param1 ,
    description = param2 +" Years Old"
  };
 return JsonConvert.SerializeObject(chk);
}

public class check
{
  public string subject { get; set; }
  public string description { get; set; }
}

HTML

<div> 
     <input type="text" name="name" id="txtname"/>
     <input type="text" name="age" id="txtage"/>
     <input type="button" id="btnSubmit" value="details"/>
</div>

Jquery

$(function () {
            $('#btnSubmit').on('click', function () {
                var options = {
                    type: "POST",
                    url: '/Ajax/CheckDetails/',
                    data: '{param1:"' + $('#txtname').val() + '",param2:"' + $('#txtage').val() + '"}',
                    async: false,
                    cache: false,
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function (response) {
                        if (response != null && response.d != null) {
                            var data = response.d;
                            alert(typeof (data)); //it comes out to be string 
                            //we need to parse it to JSON 
                            data = $.parseJSON(data);
                            alert(data.subject);
                            alert(data.description);
                        }
                    }
                };
                $.ajax(options);
            });
        });
11
RonyLoud

Um ein JSON-Objekt zurückzugeben, müssen Sie Ihre Antwort serialisieren. In Ihrer Methode geben Sie etwas wie return JsonConvert.SerializeObject(new { subject = subject, description = Description }); zurück. Für using Newtonsoft.Json; müssen Sie oben eine using-Anweisung einfügen.

Um Fehler bei der Verwendung nicht zugewiesener Variablen zu vermeiden, müssen Sie den Variablen subject und Description einen Startwert wie `string subject =" "geben. Auf diese Weise geben sie leere Zeichenfolgen zurück, wenn sie keinen neuen Wert erhalten.

Anstatt ein generisches Objekt mit new { subject = subject, description = Description } zu erstellen, können Sie tatsächlich eine Klasse erstellen, die diese Eigenschaften enthält:

public class EmailTemplate
{
    public string Subject { get; set; }
    public string Description { get; set; }
}

Und dann serialisieren Sie es auf dieselbe Weise wie oben: JsonConvert.SerializeObject(new EmailTemplate{ subject = subject, description = Description }); Wenn Sie diese Modellklasse jedoch nicht anderweitig verwenden, ist dies nicht erforderlich.

Schließlich sollten Sie in Ihrem JavaScript auf die Daten wie folgt zugreifen können:

success: function (data) {
    console.log("Subject:" + data.subject);
    console.log("Description:" + data.description);
}
1
Tyler Jennings