2011-10-23 54 views
1

在此代碼中,爲什麼response.write的文本出現在標籤中的文本之前?這是後面的代碼:爲什麼Response.Write會顯示在頁面上的控件之前?

protected void Page_Load(object sender, EventArgs e) 
{ 
    HttpRequest request = Request; 
    if (request.QueryString["game"] == "cstrike") Label1.Text = "15000 $"; 
    if (request.QueryString["game"] == "diablo3") Label1.Text = "25000 $"; 
    if (request.QueryString["game"] == "pes2012") Label1.Text = "30000 $"; 
    if (request.QueryString["game"] == "splinterCellConviction") Label1.Text = "75000 $"; 
    Response.Write("<span>Query:<span>" + request.QueryString.ToString()); 
} 

例如,輸出如下所示:

查詢: 遊戲=的cstrike 15000 $

何必當初呢順序輸出?在「ASP標籤控制」是上述所有的頁面上的控件:

我預期的輸出是這樣的:

15000 $ 查詢: 遊戲=的cstrike

這裏是asp.net頁面的代碼前面:

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

<!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=""></asp:Label> 
    </div> 

    </form> 
</body> 
</html> 

回答

1

您對call.write的調用正在搶佔頁面的正常渲染。這裏是asp.net中事件的順序http://msdn.microsoft.com/en-us/library/ms178472.aspx

你對response.write的調用基本上是說「繼續寫下這個值到流而不用等待渲染管道的其餘部分發生」。我認爲這是不好的形式,你應該在包含15000 $值的頁面上放置一個文字。然後讓你的代碼設置文字的文本值。

1

編譯器做你告訴它一切......您可以通過代碼在調試器步進驗證......在這種情況下,你的AR e使用Response.Write併發送到客戶端...之前執行的操作不會發送到客戶端,因爲通過使用Response.Write,您基本上可以告訴ASP.NET運行時「忽略」它們!

該代碼應該完成什麼?

+0

但代碼完全運行,只是以相反的順序。 –

+0

它不是倒序,你按照你請求的順序獲得東西(在加載期間寫入響應並在渲染過程中渲染頁面的其餘部分)。 – usbsnowcrash

相關問題