ASP.NET utilizzando Bind/Eval in .aspx nell’istruzione If

nel mio .aspx sto cercando di aggiungere un’istruzione If basato su un valore proveniente da associare. Ho provato le seguenti:

<% if(bool.Parse(Eval("IsLinkable") as string)){ %>                    
        monkeys!!!!!!
        (please be aware there will be no monkeys, 
        this is only for humour purposes)
 <%} %>

IsLinkable è un bool provenienti da Legante. Ottengo il seguente errore:

InvalidOperationException
Databinding methods such as Eval(), XPath(), and Bind() can only
be used in the context of a databound control.
InformationsquelleAutor Funky | 2011-04-08

 

11 Replies
  1. 19

    È necessario aggiungere la tua logica per la ItemDataBound caso di ListView. Nel aspx non è possibile avere un se-istruzione nel contesto di un DataBinder: <%# if() %> non funziona.

    Dare un’occhiata qui: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx

    Verrà generato l’evento per ogni elemento a cui verrà associata la tua ListView e quindi il contesto in l’evento è legato all’elemento.

    Esempio, vedere se si può regolare per la tua situazione:

    protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            Label monkeyLabel = (Label)e.Item.FindControl("monkeyLabel");
            bool linkable = (bool)DataBinder.Eval(e.Item.DataItem, "IsLinkable");
            if (linkable)
               monkeyLabel.Text = "monkeys!!!!!! (please be aware there will be no monkeys, this is only for humour purposes)";
        }
    }
    • Penso che il problema sia che lui è l’incorporazione di una dichiarazione in qualcosa che si aspetta un’espressione.
    • Suona come una buona spiegazione per me. Non ci ho mai pensato in questo modo, ma questo ha il senso perfetto.
    • Questo vale anche per il controllo del Ripetitore.
  2. 15

    Sono abbastanza sicuro che si può fare qualcosa di simile

    (Nota non ho un compilatore utile per verificare l’esatta sintassi)

    text = '<%# string.Format("{0}", (bool)Eval("IsLinkable") ? "Monkeys!" : string.Empty) %>'

    Sì, questo è il c# e il tuo utilizzo vb.net, quindi è necessario utilizzare la sintassi di vb per un operatore ternario.

    Modifica – è stato in grado di gettare in un semplice associare dati situazione, ha lavorato come un fascino.

    • L’OP non utilizza vb ma c# (vedi tag), quindi il tuo esempio è pertinente. Penso che è necessario iniziare con <%# se, ma mi corregga se sbaglio.
    • Oh guarda che è c#. Ancora meglio! Anche lei ha ragione, dovrebbe essere <%#, aggiorna la risposta.
  3. 7

    È possibile utilizzare asp:PlaceHolder e nel Visibile, possono mettere eval. Come di seguito

       <asp:PlaceHolder ID="plc" runat="server" Visible='<%# Eval("IsLinkable")%>'>
           monkeys!!!!!!
           (please be aware there will be no monkeys, this is only for humour purposes)
       </asp:PlaceHolder>
  4. 5

    OMG questo ha preso tutto troppo lungo per capire…

    <asp:PlaceHolder runat="server" Visible='<%# Eval("formula.type").ToString()=="0" %>'>
    Content
    <asp:PlaceHolder>

    formula.tipo è una tabella collegata int colonna. Grazie per il contributo, per ottenere la mia risoluzione.

  5. 4

    Se si hanno problemi di ottenere e.Item.DataItem in Bazzz la risposta di provare

    protected void ListView_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        using (ListViewDataItem listViewDataItem = (ListViewDataItem) e.Item)
        {
            if (listViewDataItem != null)
            {
                Label monkeyLabel = (Label)e.Item.FindControl("monkeyLabel");
                bool linkable = (bool)DataBinder.Eval(listViewDataItem , "IsLinkable");
                if (linkable)
                   monkeyLabel.Text = "monkeys!!!!!! (please be aware there will be no monkeys, this is only for humour purposes)";
            }
        }
    }
  6. 4

    So che è un po ‘ tardi per questa risposta, ma per quello che vale, ecco la mia soluzione al problema:

    <%# (bool)Eval("IsLinkable") ? "monkeys!!!!!!" : "" %>
  7. 2

    È possibile creare un metodo per valutare il valore e restituisce il valore che si desidera.

    <%# IsLinkableABool( Eval("IsLinkable") ) %>

    Sul codice dietro si può creare il metodo come seguire

    protected String IsLinkableABool(String isLinkable)
    {
        if (isLinkable == Boolean.TrueString)
        {
             return "monkeys!!!!!! (please be aware...";    
        }
        else
        {
             return String.Empty;
        }
    }
    • IMPRESSIONANTE la SOLUZIONE… Scusate per il caps! Hai salvato la mia giornata 🙂
  8. 1

    Ogni volta che mi sono necessari per la gestione di condizioni all’interno di un controllo con associazione a dati, io uso il OnItemDataBound evento.

    Così si potrebbe fare:

    protected void DataBound_ItemDataBoundEvent() {
         bool IsLinkable            = (bool)DataBinder.Eval(e.Item.DataItem, "IsLinkable");  
         if(IsLinkable) {
              //do stuff
         }                                     
    
    }
  9. 0

    Ci sarebbe bisogno di vedere il resto del codice, ma il messaggio di errore mi sta dando un po ‘ di un pizzico. È possibile utilizzare SOLO la funzione Eval quando si è all’interno di un controllo associato a dati. Qualcosa come un ripetitore, datagrid, etc.

    Se si è al di fuori di un controllo associato a dati, si potrebbe caricare il valore in una variabile il code-behind e renderlo pubblico. Quindi si potrebbe usare il ASPX per l’elaborazione condizionale.

    • sì, è in un controllo ListView
  10. 0

    Per FormView di Controllo, fare riferimento a questo link.

    Ecco il codice di esempio. La mia pagina aspx FormView di Controllo simile al seguente:

    <asp:FormView ID="fv" runat="server" Height="16px" Width="832px"  
    CellPadding="4" ForeColor="#333333" ondatabound="fv_DataBound"> 
        <ItemTemplate>
            <table>
                <tr>
                    <td align="left" colspan="2" style="color:Blue;">
                        <asp:Label ID="lblPYN" runat="server" Text='<%# Eval("PreviousDegreeYN") %>'></asp:Label> 
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:FormView>

    Sto verificando il valore per <%# eval("PreviousDegreeYN") %>

    Se il mio eval("PreviousDegreeYN") == True, voglio visualizzare nel mio etichetta “lblPYN

    protected void fv_DataBound(object sender, EventArgs e)
    {
        FormViewRow row = fv.Row;
        //Declaring Variable lblPYN
        Label lblPYN;
        lblPYN = (Label)row.FindControl("lblPYN");
        if (lblPYN.Text == "True")
        {
            lblPYN.ForeColor = Color.Blue;
            lblPYN.Text = "Yes";
    
        }
        else
        {
            lblPYN.ForeColor = Color.Blue;
            lblPYN.Text = "No";
    
        }
    }
  11. 0

    Mettendo in condizione di pagina aspx non è una buona idea.anche disordinato.
    U può fare tramite operatore ternario.Ma io suggerisco di u utilizzare rowdatabound eventi della vista griglia.
    passo 1-vai alla griglia visualizzare le proprietà.Fare clic su illuminazione pulsante di elenco di tutti gli eventi.
    Passo 2-dare un nome su rowdatabound e fare doppio clic

    protected void onrow(object sender, GridViewRowEventArgs e)

       {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            TableCell statusCell = e.Row.Cells[8];//Means column 9
    
            if (statusCell.Text == "0")
            {
                statusCell.Text = "No Doc uploaded";
    
            }
            else if (statusCell.Text == "1")
            {
                statusCell.Text = "Pending";
            }
            else if (statusCell.Text == "2")
            {
                statusCell.Text = "Verified";
            }
        }
    }

Lascia un commento