Как назначить вывод метода к значению текстового поля без кода
Вопрос
Как назначить вывод метода к значению текстового поля без кода?
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Public TextFromString As String = "test text test text"
Public TextFromMethod As String = RepeatChar("S", 50) 'SubSonic.Sugar.Web.GenerateLoremIpsum(400, "w")
Public Function RepeatChar(ByVal Input As String, ByVal Count As Integer)
Return New String(Input, Count)
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%=TextFromString%>
<br />
<asp:TextBox ID="TextBox1" runat="server" Text="<%# TextFromString %>"></asp:TextBox>
<br />
<%=TextFromMethod%>
<br />
<asp:TextBox ID="TextBox2" runat="server" Text="<%# TextFromMethod %>"></asp:TextBox>
</div>
</form>
</body>
</html>
Это было в основном, поэтому дизайнерские парни могли использовать его на странице ASPX. Похоже, просто простая вещь, чтобы втянуть значение переменной в текстовое поле для меня.
Мне также сбивает с толку, почему
<asp:Label runat="server" ID="label1"><%=TextFromString%></asp:Label>
и
<asp:TextBox ID="TextBox3" runat="server">Hello</asp:TextBox>
работает, но
<asp:TextBox ID="TextBox4" runat="server"><%=TextFromString%></asp:TextBox>
вызывает ошибку компиляции.
Решение
В файлах .aspx есть пара различных типов выражений. Есть:
<%= TextFromMethod %>
который просто оставляет буквальный контроль и выводит текст во время рендеринга.
А потом есть:
<%# TextFromMethod %>
которое является выражением данных, оцениваемой, когда элемент управления является DataBound (). Есть также строители выражения, например:
<%$ ConnectionStrings:Database %>
Но здесь это не очень важно ....
Итак <%= %>
Метод не будет работать, потому что он попытался бы вставить буквальный в свойство .Text ... Очевидно, не то, что вы хотите.
А <%# %>
Метод не работает, потому что текстовое поле не база данных, и ни один из его родителей. Если ваш текстовый поле был в ретрансляторе или Gridview, то этот метод будет работать.
Так что делать? Просто позвони TextBox.DataBind()
в какой-то момент. Или, если у вас более 1 управления, просто позвоните Page.DataBind()
в вашей Page_Load
.
Private Function Page_Load(sender as Object, e as EventArgs)
If Not IsPostback Then
Me.DataBind()
End If
End Function
Другие советы
Вы пробовали использовать управление HTML вместо управления сервером? Это также вызывает ошибку компиляции?
<input type="text" id="TextBox4" runat="server" value="<%=TextFromString%>" />