#asp.net
#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());
}
Например, вывод выглядит так:
Запрос: game=cstrike 15000 $
почему он выводится в таком порядке? «Элемент управления меткой asp» находится над всеми элементами управления на странице :
Я ожидал, что результат будет выглядеть так :
Запрос на 15000 $: game=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:
Обычный рендеринг страницы вытесняется вашим вызовом response.write . Вот порядок событий в asp.net http://msdn.microsoft.com/en-us/library/ms178472.aspx
Ваш вызов response.write в основном говорит: «продолжайте и запишите это значение в поток, не дожидаясь завершения остальной части конвейера рендеринга». Я считаю, что это плохой тон и что вы должны поместить литерал на страницу, содержащую значение 15000 $. Затем пусть ваш код просто установит текстовое значение этого литерала.
Ответ №2:
Компилятор делает все, что вы ему говорите… вы можете убедиться в этом, пройдясь по коду в отладчике… в этом случае вы используете Response.Write
, и это отправляется клиенту… то, что вы делали раньше, не отправляется клиенту, потому что, используя Response.Write
, вы в основном сообщаете ASP.NET время выполнения, чтобы «игнорировать» их!
Что именно должен выполнять этот код?
Комментарии:
1. Это не обратный порядок, вы получаете вещи в том порядке, в котором вы их запрашивали (запись ответа во время загрузки и рендеринг остальной части страницы во время рендеринга).