2010-06-11 69 views
1

我正在使用ajax和jquery將內容加載到div中。在ASP.NET中使用jquery和Ajax

我的jQuery看起來像這樣

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

    $.ajax({ 

    type: "POST", 

    url: "GetStuff.aspx", 

    data: "id=0", 

    success: function(response){ 

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

    } 

    }); 

    }); 

在GetStuff.aspx我想寫出這樣

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.net HTML控件但是標籤不顯示在頁面上。

我試圖把ASP:標籤在我的aspx文件中像這樣

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

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

它也不起作用。 我怎樣才能讓asp.net html控件顯示出來?

+0

上面第二個例子的結果是什麼?例如,有沒有服務器錯誤?發送給瀏覽器的標記是什麼?在我看來,它應該已經完成​​了我認爲你所要求的事情(儘管它可能會創建一個無效的DOM狀態,它會在div標籤中包含html和body標籤)。 – joelt 2010-06-11 16:02:05

+0

好吧我重試了我的第二個例子,它完全符合我最初想要的。我不確定當我第一次嘗試時爲什麼會得到不同的結果。 – xkcd 2010-06-16 19:33:52

回答

4

你不能。您正試圖將服務器端控件添加到客戶端頁面。請返回這個代替:

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

但是,當您投遞的頁面,你會不會有能夠說

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

如果我想要奢華的做 string text = label1。文本; //不工作 我在哪裏可以放置我的asp:label控件?在aspx文件中?但在ajax調用後,它不會出現在我的div中。 – xkcd 2010-06-11 15:20:16

+0

你試圖通過ajax加載這個html的方式,你不會得到它的工作。當頁面被回傳時,服務器端控件將永遠不會被註冊到頁面上。這通常發生在編譯時,當你建立一個ASPX頁面時,控件就是頁面的屬性。本文可能值得您閱讀:http://www.4guysfromrolla.com/articles/092904-1.aspx – 2010-06-11 15:29:18

1

你試圖寫一個ASP.NET服務器控件作爲奢侈品輸出?你實際上是過於複雜的事情= d

如果你寫了

<span>HelloWorld</span> 

取而代之的

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

你會得到你想要的。當您寫入響應流時,您需要編寫有效的HTML /文本,無論如何。當它的渲染函數作爲ASP.NET生命週期的一部分被調用時,ASP.NET標籤僅被轉換爲<範圍>。

+0

我以asp:Label控件爲例。我如何使用asp.net控件而不是html? – xkcd 2010-06-11 15:14:59

+0

您需要遵循類似於@Matt Sherman所寫的路徑,在此將Web調用的響應作爲HTML返回,並避免自己調用Response.Write/Response.End。然而,這帶來了不同的問題,比如如何擺脫額外的HTML表單以及與響應一起返回的相關視圖狀態。 – Tejs 2010-06-11 15:24:53

0

只要將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可以執行數據庫查詢或其他任何事情。

+0

我試過了。你能告訴我一個例子嗎? – xkcd 2010-06-11 15:18:44

+0

更新以上... – 2010-06-11 15:57:59