我有2个dnn模块。让我们称他们为A& B.我有一个jQuery Ajax函数,它在$(document).ready()上的B上运行。
AJAX调用模块A中的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;
}
AjaxWrapper的前3行不起作用,标签没有显示在屏幕上,但ajax成功功能正常。这是一个警告,向我显示字符串“这个来自ajax的c#调用”。
以下是来自B的ajax电话。
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) {
}
});
答案 0 :(得分:2)
Asp.Net的工作原理是将控制树转换为HTML - 以创建HTML页面的方式。
当您通过AJAX呼叫服务器时,您需要知道您的Page_Load正在服务器上的控制树上运行,该控制树永远不会传递给客户端。
重申,服务器上运行的代码无法直接操作浏览器中的DOM。
如果直接使用jQuery,则必须考虑从服务器向客户端传递数据或消息。无论消息是HTML,Text还是JSon,您都必须在Javascript中处理该消息,以相应地改变页面的布局。
ASP.Net是一个非常糟糕的环境来做这种事情。请注意,如果您希望能够使用jQuery,并期望Postbacks能够反映变化,那么除非您知道自己在做什么,否则很难实现。
如果你刚刚开始你的项目,请查看MVC - jQuery在MVC中更有意义,而且更少陷阱。