ASP.NET usando Bind/Eval en .aspx en Caso de declaración de

en mi .aspx estoy mirando para agregar en una instrucción If basado en un valor procedente de los unen. He intentado lo siguiente:

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

IsLinkable es un bool que viene desde el Cuaderno. Me sale el siguiente error:

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 Kommentare

  1. 19

    Necesita añadir la lógica de la ItemDataBound caso de ListView. En el aspx no se puede tener una si-declaración en el contexto de un DataBinder: <%# if() %> no funciona.

    Echa un vistazo aquí: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx

    El evento serán planteadas para cada elemento que se va a enlazar a tu ListView y, por tanto, el contexto en el evento está relacionado con el elemento.

    Ejemplo, ver si se puede ajustar a tu situación:

    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)";
        }
    }
    • Creo que el problema es que él es la incrustación de una declaración en algo que se espera de una expresión.
    • Suena como una buena explicación para mí. Realmente no he pensado en ello de esta manera, pero esto tiene el sentido perfecto.
    • Esto también se aplica para el control Repeater.
  2. 15

    Estoy bastante seguro de que puede hacer algo como lo siguiente

    (Nota: no tengo un compilador a mano para probar la sintaxis exacta)

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

    Sí, este es el c# y su uso vb.net, por lo que tendrás que usar vb sintaxis para un operador ternario.

    Edición – fue capaz de lanzar en una simple enlazar a datos de la situación, trabajó como un encanto.

    • El OP no está utilizando vb pero c# (ver etiquetas), de manera que su ejemplo es relevante. Creo que voy a necesitar para comenzar con <%# a pesar de que, pero me corrija si estoy equivocado.
    • Oh mira, es c#. Aún mejor! También estás en lo correcto debería ser <%#, voy a actualizar la respuesta.
  3. 7

    Puede utilizar asp:PlaceHolder y en Visible puede poner eval. Como a continuación

       <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 esto me tomó completamente demasiado tiempo para averiguar…

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

    fórmula.es un tipo de la tabla vinculada columna de tipo int. Gracias por las demás contribuciones a conseguir mi resolución.

  5. 4

    Si usted está teniendo problemas para conseguir e.Item.DataItem en Bazzz la respuesta de intentar

    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

    Sé que es un poco tarde en el día para esta respuesta, pero para lo que vale aquí es mi solución para el problema:

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

    Puede crear un método para evaluar el valor y devolver el valor que desee.

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

    En el código detrás de usted puede crear el método como sigue

    protected String IsLinkableABool(String isLinkable)
    {
        if (isLinkable == Boolean.TrueString)
        {
             return "monkeys!!!!!! (please be aware...";    
        }
        else
        {
             return String.Empty;
        }
    }
    • IMPRESIONANTE la SOLUCIÓN… lo Siento por los caps! Usted salvó mi día 🙂
  8. 1

    Siempre que he necesitado para manejar las condiciones dentro de un control enlazado a datos, yo uso el OnItemDataBound evento.

    Así que usted podría hacer:

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

    Tendríamos que ver el resto de tu código, pero el mensaje de error que me está dando un poco de un toque. Usted SÓLO puede usar Eval cuando estás dentro de un control enlazado a datos. Algo como un repetidor, datagrid, etc.

    Si usted está fuera de un control enlazado a datos, usted puede cargar el valor en una variable en el código y hacerlo público. Entonces se podría utilizar en el ASPX para el procesamiento condicional.

  10. 0

    Para FormView de Control se refieren a en este enlace.

    Aquí está el código de ejemplo. Mi página aspx FormView Controlar el aspecto siguiente:

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

    Estoy comprobando el valor de <%# eval("PreviousDegreeYN") %>

    Si mi eval("PreviousDegreeYN") == True, quiero mostrar en mi etiqueta de «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

    Poner la condición de la página aspx no es una buena idea.también desordenado.
    U puede hacer usando el operador ternario.Pero te sugiero u para uso rowdatabound eventos de la vista de cuadrícula.
    paso 1-ir a la cuadrícula de propiedades de la vista.Haga clic en el botón de iluminación a la lista de todos los eventos.
    Paso 2-dar un nombre en rowdatabound y haga doble clic en

    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";
            }
        }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea