Как заставить серверный элемент управления ASP.NET принимать встроенный блок кода в качестве значения свойства?
-
23-08-2019 - |
Вопрос
У меня есть собственный серверный элемент управления со свойством Title.При использовании элемента управления я хотел бы установить значение заголовка на странице aspx следующим образом:
<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>
Однако когда я это делаю, я получаю именно отображаемую строку <%= PagePropertyValue%>, а не значение свойства, которое мне хотелось бы видеть.
Итак, после попытки выражения привязки данных (как предложено ниже).Я не получаю строковый литерал, который выглядел плохо, но и больше ничего не получаю.
<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>
Что мне нужно сделать с моим пользовательским элементом управления, чтобы принять такое значение?Или мне нужно что-то сделать со страницей.
Решение
Ты не можешь.<%= %> запишет строку непосредственно в поток ответов, что происходит после создания серверного элемента управления.Видеть эта почта для объяснения.
Так что это либо код программной части, либо привязка данных <%# +, как предлагает Закари.
Другие советы
В ответ на мой собственный вопрос я обнаружил, что на самом деле мне хотелось использовать выражения ASP.NET с синтаксисом <%$, поскольку то, что я хотел сделать, — это поместить в локализованный контент.
Это можно сделать без каких-либо дополнительных действий со стороны управления сервером.
<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>
Это работает отлично.
Попробуйте использовать синтаксис привязки данных:<%# PagePropertyValue %>
Чтобы значение свойства привязки работало правильно, как предложено, оно должно быть в файле aspx или ascx:
<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>
Затем вам нужно будет фактически связать данные на вашей странице, и вы должны добавить их в свой код за файлом (код на С#).
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
Таким образом, он свяжет данные в вашем файле ascx или aspx.
Обратите внимание, что это относится только к атрибутам управления.При использовании синтаксиса <%= вне атрибутов управления, что означает где-либо еще на странице, синтаксис работает должным образом.Таким образом, это <%= getCapitalUsername ()%> вызовет правильный метод и введет результат вызова на странице.