textbox
  • repeater
  • webforms
  • 2013-05-17 10 views 6 likes 
    6

    Ho un ripetitore che è databound ad uno SqlDataSourceRepeater.Items popola solo in Pulsante evento click quando ho DataBind in questo caso, ma tutti gli ingressi della casella di testo sono vuote

    <asp:Repeater runat="server" ID="Repeater" DataSourceID="SqlDataSource"> 
         <ItemTemplate> 
          <asp:HiddenField runat="server" Value='<%# Eval("Code") %>' ID="Code" /> 
          <asp:TextBox ID="NumberNeeded" runat="server" Text='<%# Eval("Needed") %>' /><br /> 
         </ItemTemplate> 
        </asp:Repeater> 
        <asp:Button runat="server" ID="submit" Text="submit" OnClick="submit_Click" /> 
        <asp:SqlDataSource ID="SqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="rtvFiltered" SelectCommandType="StoredProcedure"> 
         <SelectParameters> 
         </SelectParameters> 
        </asp:SqlDataSource> 
    

    voglio iterare il ripetitore e ottenere il valore in NumberNeeded in submit_Click

    protected void submit_Click(object sender, EventArgs e) 
    { 
        this.Repeater.DataBind(); //comment this guy and this.Repeater.Items has no items 
        foreach (RepeaterItem item in this.Repeater.Items) 
        { 
         String code = ((HiddenField)item.FindControl("JournalCode")).Value; 
         // below fails because "NumberNeeded" control doesn't have the Text input by the user. 
         int numNeeded = Int32.Parse(((TextBox)item.FindControl("NumberNeeded")).Text); 
    
         // Doing other stuff with numNeeded 
        } 
    } 
    

    il ripetitore mostra i suoi elementi perfettamente sulla pagina, ma quando clicco sul pulsante di invio, this.Repeater.Items è vuota (a meno che io chiamo this.Repeater.DataBind() in quel metodo).

    Ho provato esplicitamente il binding di dati Repeater in Page_Load e Page_Init all'interno e all'esterno di un controllo! Page.IsPostBack, e ogni volta che non ottengo nessun elemento o nessun valore di testo.

    Ho ottenuto una configurazione quasi identica per funzionare in passato, su una pagina senza una pagina principale. Ho anche notato che this.Master.EnableViewState è falso nel metodo submit_Click, non importa se l'ho impostato su true in Page_Init o Page_Load. this.EnableViewState è true.

    risposta

    1

    Era l'impostazione EnableViewState sulla pagina principale.

    Nel metodo Page_Load della pagina master this.EnableViewState veniva impostato su false. L'ho cambiato in Page.EnableViewState e tutto ha funzionato.

    this.EnableViewState = Page.EnableViewState; // add to Master page Page_Load method 
    

    do'h

    2

    Come si afferma, non è necessario chiamare DataBind() nel codice dietro, quindi il problema potrebbe riguardare il recupero dei dati. La procedura memorizzata prende i parametri? Hai provato ad aggiungere CancelSelectOnNullParameter="false" a SqlDataSource?

    +0

    mio stored procedure accetta parametri opzionali, Soi provato ad aggiungere CancelSelectOnNullParameter = "false" nel mio SqlDataSource, e ho avuto lo stesso comportamento (ripetitore funziona bene sulla pagina, ma la proprietà Items è ancora vuoto). – user467384

     Problemi correlati

    • Nessun problema correlato^_^