tags:

views:

1322

answers:

3

How do I assign a method's output to a textbox value without code behind?

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
<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"&gt;
<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>

it was mostly so the designer guys could use it in the aspx page. Seems like a simple thing to push a variable value into a textbox to me.

It's also confusing to me why

<asp:Label runat="server" ID="label1"><%=TextFromString%></asp:Label>

and

<asp:TextBox ID="TextBox3" runat="server">Hello</asp:TextBox>

works but

<asp:TextBox ID="TextBox4" runat="server"><%=TextFromString%></asp:TextBox>

causes a compilation error.

A: 

Well, I am not sure why you do not want code-behind? Since you have said you want the Textboxes to be server controls? What benefit do you get about not having code-behind?

It could be done with an AJAX call..

Rob Cooper
+1  A: 

Have you tried using an HTML control instead of the server control? Does it also cause a compilation error?

<input type="text" id="TextBox4" runat="server" value="<%=TextFromString%>" />
Toran Billups
+2  A: 

There's a couple of different expression types in .ASPX files. There's:

<%= TextFromMethod %>

which simply reserves a literal control, and outputs the text at render time.

and then there's:

<%# TextFromMethod %>

which is a databinding expression, evaluated when the control is DataBound(). There's also expression builders, like:

<%$ ConnectionStrings:Database %>

but that's not really important here....

So, the <%= %> method won't work because it would try to insert a Literal into the .Text property...obviously, not what you want.

The <%# %> method doesn't work because the TextBox isn't DataBound, nor are any of it's parents. If your TextBox was in a Repeater or GridView, then this method would work.

So - what to do? Just call TextBox.DataBind() at some point. Or, if you have more than 1 control, just call Page.DataBind() in your Page_Load.

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