2015-07-29 3 views
0

У меня есть веб-страница asp.net с использованием элементов управления html. Я хочу сохранить назначение в базу данных, отправив входные значения codebehind с помощью веб-метода, и я хочу, чтобы страница не обновлялась. Поэтому я использовал Ajax. в Ajax, функция success не работает и возвращает неопределенные.ajax data json using web method возвращает undefined

default.aspx:

<form id="form1" runat="server"> 
    <input id="hName" name="hName" type="text" /> 
    <input id="hSurname" name="hSurname" type="text" /> 
    <input id="hPhone" name="hPhone" type="text" /> 
    <input id="rNote" name="rNote" type="text" /> 
    <select id="rTypeSelect"> 
        <option value="1">A</option> 
        <option value="2">B</option> 
        <option value="3">C</option> 
    </select> 
    <input type="button" value="Save" id="btnSaveAppointment" name="btnSaveAppointment"/> 
</form> 

JQuery:

$("#btnSaveAppointment").live('click', function (event) { 

     name = $('#hName').val(); 
     surname = $('#hSurname').val(); 
     phone = $('#hPhone').val(); 
     note = $('#rNote').val(); 
     type = $("#rTypeSelect option:selected").text(); 
     rdate = '01.09.2015'; 
     rhour = '09.30'; 
     var appointment= {}; 
     appointment= { 
      _name: name, 
      _surname: surname, 
      _phone: phone, 
      _note: note, 
      _type: type, 
      _rdate: rdate, 
      _rhour: rhour 
     } 

     $.ajax({ 
      type: 'POST', 
      url: '../saveAppointment.aspx/save', 
      data: { appointment: JSON.stringify(appointment) }, 

      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      async: true, 

      success: function (result) { 
       alert(result); 
      }, 
      error: function() { 
       alert('Error!' + result.d); 
      } 
     }); 
    }); 

метод веб-saveAppointment.aspx:

public partial class saveAppointment : System.Web.UI.Page 
    { 
     [System.Web.Services.WebMethod] 
     [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
     public static string save(string jsondata) 
     { 
      var output = JsonConvert.DeserializeObject<Appointment>(jsondata); 
      Appointment r = (Appointment)output; 
      r.Name= output.rName.ToString(); 
      //sql code here  
      return r.Name; 
     } 

и это класс:

public class Appointment 
    { 
     public int ID { get; set; } 
     public string rName{ get; set; } 
     public string rSurname { get; set; } 
     public string rPhone{ get; set; } 
     public string rNote{ get; set; } 
     public string rType{ get; set; } 
     public DateTime rDate{ get; set; } 
     public DateTime rHour{ get; set; } 
    } 

Когда я удаляю параметр WebMethod (строка jsondata), функция успеха Ajax не прерывается. Но когда я устанавливаю параметр json, он терпит неудачу. Пожалуйста, покажите мне, где я делаю неправильно, спасибо!

ответ

0
Try this 
$.ajax({ 
      type: 'POST', 
      url: '../saveAppointment.aspx/save', 
      data: "{ 'appointment': "+JSON.stringify(appointment)+" }",//use inverted commas here 

      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      async: true, 

      success: function (result) { 
       alert(result); 
      }, 
      error: function() { 
       alert('Error!' + result.d); 
      } 
     }); 
+1

Можете ли вы сказать нам, что вы изменили именно так, это может принести пользу будущих читателей – Izzy

0

Похоже, вы смущены тем, какой тип объекта вы используете в C# -land. «output» имеет тип «Назначение», поэтому его член будет называться _name not rName. Если вы проверите значение r (из строки Назначение r = (Назначение) output;), тогда все станет ясно, я думаю.

Следуя за вашим комментарием - система не может знать, что _name сопоставляется с rName. Вы можете изменить их имена, чтобы соответствовать или вы можете сделать что-то вроде:

public class Appointment 
{ 
    ... 
    [JsonProperty(PropertyName = "_name")] 
    public string rName{ get; set; } 
+0

я бросил jsondata (выход) на объект Назначения типа после десериализации. Итак, r здесь экземпляр Назначений. rName - это то, что называется Name в классе Appointment. – linda22

+0

Вы правы. класс должен соответствовать json, и я добавил также аннотации JsonProperty. но вопрос все тот же, он должен быть чем-то другим .. спасибо вам в любом случае. – linda22

+0

Любой шанс, который вы можете проголосовать за меня - мне нужно, чтобы я мог комментировать сообщения, а не отправлять ответы :-D –

0
parameter pass appointment not jsondata in severside code 

     public static string save(string appointment) 
     { 
      var output = JsonConvert.DeserializeObject<Appointment>(appointment); 
      Appointment r = (Appointment)output; 
      r.Name= output.rName.ToString(); 
      //sql code here  
      return r.Name; 
     } 
Смежные вопросы