为什么Response.Write出现在页面上的控件之前?

时间:2011-10-23 17:40:08

标签: asp.net

在此代码中,为什么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>

2 个答案:

答案 0 :(得分:1)

编译器执行您告诉它的所有操作...您可以通过调试器中的代码来验证...在这种情况下,您正在使用Response.Write并将其发送到客户端...你之前做的事情不会发送到客户端,因为使用Response.Write你基本上告诉ASP.NET运行时“忽略”它们!

该代码应该完成什么?

答案 1 :(得分:1)

您对response.write的调用正在抢占页面的正常呈现。以下是asp.net http://msdn.microsoft.com/en-us/library/ms178472.aspx

中事件的顺序

您对response.write的调用基本上是说“继续将此值写入流而不等待渲染管道的其余部分发生”。我认为这是一个糟糕的形式,你应该在包含15000 $值的页面上放置一个文字。然后让您的代码设置该文字的文本值。