Подтвердить что ты не робот

Почему <% =%> работает в одной ситуации, но не в другой

Это связано с плохим ответом, который я дал вчера вечером. Любопытство в отношении того, почему работает один метод, а не другой, подталкивает меня, и я надеюсь, что кто-то умнее меня может дать мне правильное объяснение (или указать мне на документацию), почему следующее поведение такое, как есть.

Учитывая следующий код:

protected string GetMyText(string input)
{
  return "Hello " + HttpUtility.HtmlEncode(input);
}

Почему это работает

 <asp:Label ID="Label1" runat="server"><%= GetMyText("LabelText") %></asp:Label>

, но это не

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />

Изменить - добавлено

Рискуя, что мой первоначальный тупой ответ будет подавлен больше времени, здесь ссылка на исходный вопрос, так как некоторые ответы, которые я получаю сейчас, уже были освещены в этом вопросе.

Почему я не могу установить свойство asp: Label Text, вызвав метод в файле aspx?

4b9b3361

Ответ 1

Использование <%= %> равно помещению Response.Write("") на вашу страницу. При этом:

<asp:Label ID="Label1" runat="server"><%= GetMyText("LabelText") %></asp:Label>

Процессор ASP.NET оценивает элемент управления, затем при рендеринге выводит содержимое элемента управления и вызывает Response.Write, где он видит <%=.

В этом примере:

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />

Вы не можете использовать Response.Write("") в атрибуте Text, потому что он не возвращает строку. Он записывает свой вывод в буфер ответа и возвращает void.

Если вы хотите использовать синтаксис тегов сервера в разметке ASP.NET, вам нужно использовать <%# %>. Эта комбинация данных разметки связывает значение в тегах. Чтобы выполнить эту работу, вам нужно будет вызвать DataBind() в вашей странице Load(), чтобы она работала.

Ответ 2

Поскольку они являются инструкциями на стороне сервера, вторая часть кода эквивалентна:

<asp:Label ID="Label1" runat="server" Text='Response.Write(GetMyText("LabelText"))' />

Ответ 3

<% = GetMyText ( "LabelText" )% > в основном означает

Response.Write(GetMyText ( "LabelText" ));

Здесь все в порядке.    <% = GetMyText ( "LabelText" )% >

Однако, когда вы используете это:

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />

В основном это означает:

Label1.Text = Response.Write(GetMyText ( "LabelText" ));

что является неправильным утверждением.

Ответ 4

Неверный формат:

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />

Правый формат с использованием ресурсов:

<asp:Label ID="Label1" runat="server" Text='<%$ Resources:Resource, MyText %' />

Ответ 5

Сделайте это на серверах, если у вас есть LabelText в файле Global Resource:

<asp:Label ID="Label1" runat="server" Text="<%$ Resources: resourceName, LabelText %>" />

Ответ 6

Чтобы он работал во втором случае, вам нужно его следующее:

<asp:Label ID="Label1" runat="server" Text="<%# GetMyText("LabelText") %>" />

И тогда Label1 необходимо будет привязать к базе данных.