ASP.NET在If语句中使用.aspx中的Bind / Eval

时间:2011-04-08 14:21:21

标签: c# if-statement eval bind webforms

在我的.aspx中我希望根据来自绑定的值添加一个If语句。我尝试过以下方法:

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

IsLinkable是来自Binder的bool。我收到以下错误:

InvalidOperationException
Databinding methods such as Eval(), XPath(), and Bind() can only
be used in the context of a databound control.

11 个答案:

答案 0 :(得分:19)

您需要将您的逻辑添加到ListView的ItemDataBound事件中。在aspx中,您不能在DataBinder的上下文中使用if语句:<%# if() %>不起作用。

看看这里:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx

将为将绑定到ListView的每个项目引发事件,因此事件中的上下文与项目相关。

示例,看看您是否可以根据自己的情况进行调整:

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

答案 1 :(得分:15)

我很确定你可以做类似以下的事情

(注意我没有编译器方便测试确切的语法)

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

是的,这是c#和您使用的vb.net,因此您需要为三元运算符使用vb语法。

编辑 - 能够投入到简单的数据绑定情境中,就像一个魅力。

答案 2 :(得分:7)

您可以使用asp:PlaceHolder,在Visible中可以使用eval。如下所示

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

答案 3 :(得分:4)

如果您在Bazzz的回答中遇到问题e.Item.DataItem,请尝试

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

答案 4 :(得分:4)

我知道这个答案在当天有点晚了但是这里值得我解决的问题是:

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

答案 5 :(得分:4)

OMG这花了太长时间才搞清楚......

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

formula.type是链接表的int列。感谢您为解决问题所做的其他贡献。

答案 6 :(得分:2)

您可以创建一个方法来评估值并返回所需的值。

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

在后面的代码中,您可以创建如下方法

protected String IsLinkableABool(String isLinkable)
{
    if (isLinkable == Boolean.TrueString)
    {
         return "monkeys!!!!!! (please be aware...";    
    }
    else
    {
         return String.Empty;
    }
}

答案 7 :(得分:1)

每当我需要处理数据绑定控件中的条件时,我都会使用OnItemDataBound事件。

所以你可以这样做:

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

}

答案 8 :(得分:0)

我们需要查看其余的代码,但错误消息给了我一些提示。当您在数据绑定控件内时,您只能使用Eval。诸如转发器,数据网格等等。

如果您不在数据绑定控件之外,则可以将值加载到代码隐藏的变量中并将其公开。然后你可以在ASPX上使用它进行条件处理。

答案 9 :(得分:0)

对于FormView控件,请参阅this link

以下是示例代码。我的aspx页面FormView控件如下所示:

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

我正在检查<%# eval("PreviousDegreeYN") %>

的值

如果我的eval("PreviousDegreeYN") == True,我想在我的标签“ 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";

    }
}

答案 10 :(得分:0)

放置条件aspx页面不是一个好主意。也是凌乱的。 你可以使用三元运算符。但我建议你使用网格视图的rowdatabound事件。 步骤1 - 转到网格视图属性。单击照明按钮以列出所有事件。 第2步 - 在rowdatabound上给出一个名称,然后双击

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