在ASP.NET和C#中手动进行AJAX调用

Tom*_*icz 9 c# asp.net ajax xmlhttprequest

我想在ASP.NET中编写自己的AJAX,而不是使用ASP.NET ScriptManager等.

为什么?我喜欢手动做东西并且知道内部的东西是如何工作的,所以我只想自己做.

所以我的问题是,在我进行AJAX调用之后:

var ajaxCall = new XMLHttpRequest();
....
ajaxCall.send(null)
Run Code Online (Sandbox Code Playgroud)

我怎样才能在C#中添加Page_Load(或不),以便它监听它并返回一个String例如.

cas*_*One 6

喜欢这个答案,+1自己做.

但是,我必须强烈建议您在客户端使用类似jQuery的库来解决浏览器之间的差异(在这种特定情况下,存在差异).它(或其他库)将提供一个抽象,您可以在所有Web浏览器中使用它来规范化您的代码.

话虽如此,在ASP.NET中,您可以检查调用是否是回发,如果是,则只需将内容写入输出流.

但是,我强烈建议不要这样做.相反,对ajax的调用应该完全是另一个页面,因为它提供了不同的目的,不同类型的响应,因此,它应该拥有自己的URL.

另外,请注意,当以XML或JSON格式返回内容时(这是Ajax调用的典型内容,现在JSON非常占优势),将响应的ContentType属性更改为适当的mime类型非常重要("text/xml"for XML",application/json"for JSON".

请注意,ASP.NET MVC使这一切变得更加容易,并且您可能希望使用它而不是WebForms模型,因为MVC是从头开始构建的,以便更轻松地处理许多这些场景.它允许您干净地分离处理页面呈现的方法,以及以Ajax调用形式提供功能的方法(这只是众多好处之一).


And*_*lam 4

+1 对于你自己做事 - 我想知道在使用为我做事的框架之前我可以自己做事,所以如果它出现问题,我大致知道如何开始修复它。

无论如何,还是要回答你的问题。只需使用 ASP.NET 或 Response.Write 正常输出数据即可。如果您正在执行 POST 请求,则可以使用 if (Page.IsPostBack) 在 Page_Load 中检查这一点。请记住,通常您只会发送页面的一部分的数据,而不是整个页面本身,因此您不需要<html>,<head><body>标签。

当我之前在 ASP.NET 网站中看到这种做法时,AJAX 调用使用了单独的页面(例如,index.aspx = 普通站点,index-ajax.aspx = ajaxified 页面组件。)

if (Page.IsPostBack)
{
    Response.Write("Hello, world!  From AJAX.");
}
Run Code Online (Sandbox Code Playgroud)

您不必使用 Page.IsPostBack,大多数 AJAX 请求只是 GET,因此如果您输入 Page_Load:

Response.Write("Hello, world!  From AJAX.");
Run Code Online (Sandbox Code Playgroud)

然后对该页面执行 AJAX 调用,您将收到“Hello, world! From AJAX”。从 AJAX 调用返回。