Ответ 1
Не уверен, как отметить это как таковое, но это немного дубликат. Смотрите эту тему.
Я не думаю, что встраивание кода в вашу разметку действительно сделает вашу разметку более ясной или более элегантной.
Это работает:
<span value="<%= this.Text %>" />
Это не работает:
<asp:Label Text="<%= this.Text %>" runat="server" />
Почему это?
Как я могу заставить второй случай работать правильно, т.е. установить текст метки в значение переменной "Текст"?
Не уверен, как отметить это как таковое, но это немного дубликат. Смотрите эту тему.
Я не думаю, что встраивание кода в вашу разметку действительно сделает вашу разметку более ясной или более элегантной.
Использовать Выражения привязки данных
<asp:Label ID="Label1" runat="server" Text="<%# DateTime.Now %>" ></asp:Label>
Код позади,
protected void Page_Load(object sender, EventArgs e){
DataBind();
}
вы можете сделать это
<asp:Label ID="Label1" runat="server" ><%= variable%></asp:Label>
<asp:Label>
компилируется во время выполнения и конвертируется в теги html. Вы можете установить текст с помощью codebehind или так:
<asp:Label id="Text1" runat="server" />
<% Text1.Text = this.Text;%>
UPD: Похоже, что мой вариант не работает, это лучше:
protected void Page_Load(object sender,EventArgs e)
{
Text1.Text = this.Text;
}
В моем коде я использую что-то подобное легко, но в контроле данных, таком как шаблон элемента ListView
<asp:HyperLink ID="EditAction" class="actionLinks" Visible='<%#Eval("IsTrue").ToString() != "True"%>' runat="server" NavigateUrl='<%# Eval("ContentId","/articles/edit.aspx?articleid={0}")%>' />
Но когда я попытался использовать внешний элемент управления привязкой данных, используя <% #..% > , он просто не работает.
Вы можете легко сделать с
<a href="<%=myHref%>">My href</a>
Но для серверных элементов управления и вне контроля привязки данных. Нам нужно явно вызвать функцию DataBind() в событии pageload
<asp:Hyperlink ID="aa" NavigateUrl='<%#myHref%>' >
Вам нужно будет установить значение серверного элемента управления в коде
Прежде всего, назначьте идентификатор элементу управления ярлыками, чтобы вы могли получить доступ к элементу управления
<asp:Label ID="myLabel" runat="server" />
Затем в вашей функции Page_Load установите значение поля "Текст" ваших меток
protected void Page_Load(object sender, EventArgs e)
{
myLabel.Text = 'Whatever you want the label to display';
}
Эта функция будет находиться в вашем коде за файлом или, если вы не используете код за моделью, внутри вашей страницы aspx вам понадобится
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
myLabel.Text = 'Whatever you want the label to display';
}
</script>
Удачи.
Просто добавьте этот маленький самородок для тех, кто хочет получить техническую информацию по проблеме - https://blogs.msdn.microsoft.com/dancre/2007/02/13/the-difference-between-and-in-asp -сеть/
Я думаю, что суть в довольно приличном согласии с другими ответами:
- Выражения <% = оцениваются во время рендеринга
- Выражения <% # оцениваются во время DataBind() и вообще не оцениваются, если DataBind() не вызывается.
- Выражения <% # можно использовать в качестве свойств серверных элементов управления. <% = выражения не могут.