ASP.NET TextBox - is it possible to initialize text attribute with in line code <% %>

前端 未结 5 915
傲寒
傲寒 2021-01-18 12:51


I need to initialize the text attribute of the text box element with a property from some where else when actually I can simply do this from code but it will be much m

相关标签:
5条回答
  • 2021-01-18 13:36

    OK so the basic problem here is that if you use an inline expression you can NOT use it to set a property of a server-side control outside of a binding context (using a binding expression). I have inferred that this is probably because of the timing of the evaluation of these inline expressions. You can, however, render client-side markup in this way. If you want to keep the functionality purely in your aspx file, this is the way to do it.

    Edit: Based on input from Justin Keyes, it appears it IS possible to use a binding expression to set the property. You need to manually invoke Page.DataBind() to trigger the textbox to evaluate the expression (see answer below).

    For instance this:

    <asp:Label ID="lbl" runat="server" Text="<%= Now.ToShortDateString() %>"  />
    

    Will produce this output:

    <%= Now.ToShortDateString() %>

    On the other hand this:

    <%= "<span>" & Now.ToShortDateString() & "</span>"%>

    Will produce this output:

    7/27/2011

    The "normal" way to solve this problem is just to set the Label.Text properties in a Page.Load event handler or another appropriate event handler depending on your needs, as below. This is the way I believe most people would prefer to do it, and is most easily understandable in my opinion.

    Markup:

    <asp:Label ID="lbl" runat="server" />
    

    Code:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        lbl.Text = Now.ToShortDateString()
    End Sub
    
    0 讨论(0)
  • 2021-01-18 13:40

    You can set the text on a page in a similar way.

    <asp:TextBox id="TextBox1" runat="server" Text='<%#GetValue('Title)%>' />
    

    But in order for this to work, you will need to DataBind the control on Page_Load. For multiple TextBox controls you could just loop through each and databind them so that you do not have to hard code the databinding of each.

    I am not sure what your ContextItem is though, so you would have to modify my code.

    0 讨论(0)
  • 2021-01-18 13:42

    Option 1: don't use server controls

    If you aren't accessing the value on the server, just use plain HTML instead of an ASP.NET server control:

    <input ID="Textbox1" Type="Text"  
        Value='<%= new ContextItem("title").Value %>' />
    

    Option 2: use Page.DataBind()

    If you change your code to use <%# instead of <%= (as below) and call Page.DataBind(), it will work (I've tested it). Change your markup to this:

    <asp:TextBox runat="server" Text="<%# new ContextItem("title").Value %>" />
    

    And in your logic, call Page.DataBind() in the Load event like this:

    protected void Page_Load(object sender, EventArgs e) {
        Page.DataBind(); 
    }
    

    Even though the TextBox is not contained in a typical "data bound" control such as a Repeater or GridView, calling DataBind() on a control will force it to evaluate <%# ... %> statements.

    The Moof's comment (below) is correct. This post also mentions Page.DataBind().

    0 讨论(0)
  • 2021-01-18 13:44

    90% of the time when I try this I have to use single quotes ('') instead of double quotes ("") around the <%%>. Give that a try before you spend too much time on anything else.

    0 讨论(0)
  • 2021-01-18 13:50

    The short answer is NO, you can only use this kind of code with databindings, that means inside a GridView for example. But you can use this in the head section.

    I use it to prefix my urls sometimes with something predefined. Example

      <script src="<%=Utils.GetGeneralPrefix()%>/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    

    In that case it works.

    Hope it helps.

    0 讨论(0)
提交回复
热议问题