函数在ajax调用上无法正常工作

时间:2015-03-16 15:31:48

标签: c# jquery html ajax

我有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) {
            }
        });

1 个答案:

答案 0 :(得分:2)

Asp.Net的工作原理是将控制树转换为HTML - 以创建HTML页面的方式。

当您通过AJAX呼叫服务器时,您需要知道您的Page_Load正在服务器上的控制树上运行,该控制树永远不会传递给客户端。

重申,服务器上运行的代码无法直接操作浏览器中的DOM。

如果直接使用jQuery,则必须考虑从服务器向客户端传递数据或消息。无论消息是HTML,Text还是JSon,您都必须在Javascript中处理该消息,以相应地改变页面的布局。

ASP.Net是一个非常糟糕的环境来做这种事情。请注意,如果您希望能够使用jQuery,并期望Postbacks能够反映变化,那么除非您知道自己在做什么,否则很难实现。

如果你刚刚开始你的项目,请查看MVC - jQuery在MVC中更有意义,而且更少陷阱。