【问题标题】:How to assign a method's output to a textbox value without code behind如何在没有代码的情况下将方法的输出分配给文本框值
【发布时间】:2010-09-07 08:29:11
【问题描述】:

如何在没有代码的情况下将方法的输出分配给文本框值?

<%@ 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>

导致编译错误。

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    您是否尝试过使用 HTML 控件而不是服务器控件?是否也会导致编译错误?

    <input type="text" id="TextBox4" runat="server" value="<%=TextFromString%>" />
    

    【讨论】:

      【解决方案2】:

      .ASPX 文件中有几种不同的表达式类型。有:

      <%= TextFromMethod %>
      

      它只是保留一个文字控件,并在渲染时输出文本。

      然后是:

      <%# TextFromMethod %>
      

      这是一个数据绑定表达式,在控件为 DataBound() 时计算。还有表达式构建器,例如:

      <%$ ConnectionStrings:Database %>
      

      但这在这里并不重要......

      因此,&lt;%= %&gt; 方法将不起作用,因为它会尝试将 Literal 插入 .Text 属性...显然,这不是您想要的。

      &lt;%# %&gt; 方法不起作用,因为 TextBox 不是 DataBound,也不是它的任何父项。如果您的 TextBox 在 Repeater 或 GridView 中,则此方法可以工作。

      那么 - 怎么办?只需在某个时候致电TextBox.DataBind()。或者,如果您拥有超过 1 个控件,只需在您的 Page_Load 中调用 Page.DataBind()

      Private Function Page_Load(sender as Object, e as EventArgs)
         If Not IsPostback Then
            Me.DataBind()
         End If
      End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 2012-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-29
        相关资源
        最近更新 更多