【问题标题】:Using Jquery and Ajax in ASP.NET在 ASP.NET 中使用 Jquery 和 Ajax
【发布时间】:2010-06-11 15:05:12
【问题描述】:

我正在使用 ajax 和 jquery 将内容加载到 div 中。

我的 jquery 是这样的

  $("a.trigger").click(function() {

   $.ajax({

    type: "POST",

    url: "GetStuff.aspx",

    data: "id=0",

    success: function(response){

     $("#contentDiv").html(response);

    }

   });

     });

在 GetStuff.aspx 中我想写一些 asp.net html 控件,比如

  private void Page_Load(object sender, System.EventArgs e)

  {

      Response.Expires = -1;

      Response.ContentType = "text/plain";

      Response.Write("<asp:Label id=\"label1\" runat=\"server\" text=\"helloworld\"/>");

      Response.End();

  }

但是标签没有出现在页面上。

我试图将 asp:Label 像这样放在我的 aspx 文件中

<%@ Page Language="C#" Inherits="Untitled.GetStuff" %>

<asp:Label id="label12" runat="server" text="helloworld2"/>

它也不起作用。 如何让 asp.net html 控件显示出来?

【问题讨论】:

  • 上面第二个例子的结果是什么?例如,是否有服务器错误?什么标记被发送到浏览器?在我看来,它应该已经完成​​了我认为您要问的事情(尽管它可能会创建一个无效的 DOM 状态,该状态会在 div 标签内包含 html 和 body 标签)。
  • 好的,我重试了第二个示例,它完全符合我最初的要求。我不知道为什么我第一次尝试时得到了不同的结果。

标签: c# asp.net jquery ajax


【解决方案1】:

你不能。您正在尝试将服务器端控件添加到客户端页面。尝试返回它:

Response.Write("<span id=\"label1\">helloworld</span>);

但是,当您回发页面时,您将无法说出来

string text = label1.Text; //DOES NOT WORK

【讨论】:

  • 如果我想要奢侈地做 string text = label1.Text; //不起作用 我应该把我的 asp:label 控件放在哪里?在.aspx 文件中?但是在ajax调用之后它不会出现在我的div中。
  • 你试图通过 ajax 加载这个 html 的方式你不会让它工作。当页面被回发时,服务器端控件将永远不会在页面中注册。这通常发生在编译时,当您构建 ASPX 页面时,其上的控件是页面的属性。这篇文章可能值得你一读:4guysfromrolla.com/articles/092904-1.aspx
【解决方案2】:

您正在尝试编写一个 ASP.NET 服务器控件作为输出?你实际上把事情复杂化了=D

如果你写出来

<span>HelloWorld</span>

而不是

<asp:Label Id="label1" runat="server" text="HelloWorld" />

你会得到你想要的。当您写入响应流时,您需要编写有效的 HTML / 文本,无论如何。只有当它的渲染函数作为 ASP.NET 生命周期的一部分被调用时,ASP.NET 标签才会转换为

【讨论】:

  • 我以asp:Label控件为例。我将如何使用 asp.net 控件而不是 html?
  • 您需要遵循类似于@Matt Sherman 所写的路径,将网络调用的响应作为 HTML 返回并避免自己调用 Response.Write / Response.End。但是,这会带来不同的问题,例如如何摆脱额外的 HTML 表单和将与响应一起返回的相关视图状态。
【解决方案3】:

只需将 GetStuff.aspx 视为常规页面。将您的 HTML 放在 .aspx 中,并将任何业务逻辑放在 Page_Load 中。然后它将输出您的 ajax 调用可以使用的 HTML。

更新:

您的 GetStuff.aspx 页面类似于:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GetStuff.aspx.cs" Inherits="GetStuff" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label Id="label1" runat="server" text="Hello World" />
    <asp:Label Id="idToDisplay" runat="server" /> 
    </div>
    </form>
</body>
</html>

那么您的代码隐藏 GetStuff.aspx.cs 将包含:

protected void Page_Load(object sender, EventArgs e)
{
    var id = Request["id"].ToString();
    this.idToDisplay.Text = id;
}

当然,您的 Page_Load 可以进行数据库查询或其他操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 2011-04-22
    相关资源
    最近更新 更多