2015-03-16 5 views
0

У меня есть 2 модуля dnn. Позволяет называть их A & B. У меня есть функция jQuery Ajax, которая работает на B на $ (document) .ready().Функция не работает должным образом при вызове ajax

на основе AJAX вызывает событие Page_Load в модуле А., где у меня есть следующий код на Page_Load

if (Request.Headers["X-OFFICIAL-REQUEST-MINE"] == "TRUE") 
    { 
     AjaxWrapper(Request.Headers["X-ItemString"].ToString()); 
    } 

AjaxWrapper имеет следующий код

protected void AjaxWrapper(string Inputstring) 
    { 
     Label testLbl = new Label(); 
     testLbl.Text = Inputstring; 
     DynamicPlaceHolder.Controls.Add(testLbl); 


     Inputstring = " This c# call from ajax works!!!"; 
     Response.Clear(); 
     Response.ContentType = "text"; 
     byte[] b = Response.ContentEncoding.GetBytes(Inputstring); 
     Response.AddHeader("Content-Length", b.Length.ToString()); 
     Response.Write(Inputstring); 
     Response.Flush(); 
     Response.Close(); 
     Response.End(); 
     return; 
    } 

Первые 3 строки AjaxWrapper не работают и метка не отображается на экране, но работает ajax sucess fucntion. это предупреждение, чтобы показать мне строку «Этот вызов C# из ajax works».

Ниже приводится Аякс вызов из В.

jQuery.ajax({ 
      type: "POST", 
      async: "false", 
      url: location.href, 
      contentType: "application/json; charset=utf-8", 
      data: (jsonData), 
      dataType: "text", 
      success: function (data, textStatus, jqXHR) { 
       alert("Response" + jqXHR.responseText); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("Error: " + textStatus + ", " + errorThrown); 
      }, 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader("X-ItemString", $Pids); 
       xhr.setRequestHeader("X-OFFICIAL-REQUEST-MINE", "TRUE"); // Used to ID as a AJAX Request 
      }, 
      complete: function (XMLHttpRequest, textStatus) { 
      } 
     }); 

ответ

2

Asp.Net работает путем преобразования дерева управления в HTML - таким образом, создавая страницу HTML.

Когда вы звоните на сервер через AJAX, вам необходимо знать, что ваша Page_Load работает на дереве управления на сервере, который никогда не передается клиенту.

Повторяя, код, запущенный на сервере, не может напрямую манипулировать DOM в браузере.

Если вы используете jQuery напрямую, вам нужно подумать о передаче данных или сообщений от сервера к клиенту. Должно ли сообщение быть HTML, Text или JSon, вам необходимо обработать это сообщение в Javascript, чтобы соответствующим образом изменить макет вашей страницы.

ASP.Net - действительно ужасная среда для такого рода вещей. Имейте в виду, что если вы ожидаете, что сможете использовать jQuery, а также ожидаете, что Postbacks будут отражать изменения, это тяжело, если вы не знаете, что делаете.

Если вы только начинаете свой проект, проверьте MVC - jQuery делает намного больше смысла в MVC и меньше ошибок.

Смежные вопросы