He seguido el método de llamada Ajax y el método web asp.net.
Mi función asp.net está devolviendo algunos valores. Los necesito en la llamada Ajax.
He intentado muchas cosas pero no he tenido éxito todavía.
LLAMADA AJAX
<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>método web asp.net
Actualizado después de tu respuesta
[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 ;Incluya 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); }); });Para devolver un objeto JSON, debe serializar su respuesta. En su método, devuelva algo como return JsonConvert.SerializeObject(new { subject = subject, description = Description }); Deberá agregar una declaración de using en la parte superior para using Newtonsoft.Json; .
Para evitar errores sobre el uso de variables no asignadas, deberá proporcionar valores iniciales a las variables de subject y Description como `string subject = "". De esa forma, si no obtienen un nuevo valor, devuelven cadenas vacías.
En lugar de crear un objeto genérico de new { subject = subject, description = Description } , podría crear una clase que contenga esas propiedades:
public class EmailTemplate { public string Subject { get; set; } public string Description { get; set; } } Y luego serialícelo de la misma manera anterior: JsonConvert.SerializeObject(new EmailTemplate{ subject = subject, description = Description }); Pero si no va a usar esa clase de modelo en ningún otro lugar, no es necesario.
Finalmente, en su JavaScript, debería poder acceder a los datos de esta manera:
success: function (data) { console.log("Subject:" + data.subject); console.log("Description:" + data.description); }Puede return Json(Your_object) . Pero debe cambiar la firma de su método para return IHttpActionResult . Un modelo de uso para devolver valores. Por ejemplo:
public class EmailModel { public string TemplateSubject {get;set;} public string TemplateDescription {get;set;} }Entonces su instrucción de devolución se verá como
return Json(emailModel);