Как заставить серверный элемент управления ASP.NET принимать встроенный блок кода в качестве значения свойства?

StackOverflow https://stackoverflow.com/questions/387167

Вопрос

У меня есть собственный серверный элемент управления со свойством 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 ()%> вызовет правильный метод и введет результат вызова на странице.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top