web-dev-qa-db-fra.com

Renvoyer un objet Json de Asp.net webMethod à un appel Ajax

J'ai suivre la méthode d'appel Ajax et la méthode web asp.net.

Ma fonction asp.net renvoie certaines valeurs dont j'ai besoin dans Ajax call.

J'ai essayé beaucoup de choses mais je n'ai pas encore réussi.

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  

Mis à jour après votre réponse

[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

Inclure 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

Pour renvoyer un objet JSON, vous devez sérialiser votre réponse. Dans votre méthode, retournez quelque chose comme return JsonConvert.SerializeObject(new { subject = subject, description = Description });. Vous devrez ajouter une instruction using en haut de using Newtonsoft.Json;.

Afin d'éviter les erreurs d'utilisation de variables non affectées, vous devez attribuer à vos variables subject et Description des valeurs de départ telles que `string subject =" ". Ainsi, s'ils n'obtiennent pas une nouvelle valeur, ils renvoient des chaînes vides.

Au lieu de créer un objet générique de new { subject = subject, description = Description }, vous pouvez en effet créer une classe contenant ces propriétés:

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

Et puis sérialisez-le de la même manière que ci-dessus: JsonConvert.SerializeObject(new EmailTemplate{ subject = subject, description = Description }); Mais si vous n'utilisez pas cette classe de modèle ailleurs, ce n'est pas nécessaire.

Enfin, dans votre JavaScript, vous devriez pouvoir accéder aux données comme ceci:

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