Как назначить вывод метода к значению текстового поля без кода

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Как назначить вывод метода к значению текстового поля без кода?

<%@ 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%>" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top