关于c#:ASP.NET在If语句中使用.aspx中的Bind / Eval

ASP.NET using Bind/Eval in .aspx in If statement

在my.aspx中,我希望基于来自绑定的值添加一个if语句。我尝试了以下方法:

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

IsLinkable是一个来自活页夹的bool。我得到以下错误:

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

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

请访问:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx

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

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

1
2
3
4
5
6
7
8
9
10
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
text = '<%# string.Format("{0}", (bool)Eval("IsLinkable") ?"Monkeys!" : string.Empty) %>'

是的,这是C和您使用的vb.net,所以您需要使用vb语法作为三元运算符。

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


你可以使用asp:PlaceHolder,在可见区域可以放eval。如下所示

1
2
3
4
   '>
       monkeys!!!!!!
       (please be aware there will be no monkeys, this is only for humour purposes)
   </asp:PlaceHolder>

天哪,这花了太长时间才弄明白…

'>
Content

formula.type是链接表的int列。感谢您为我的决议做出的其他贡献。


我知道这个答案有点晚了,但值得一提的是我的解决方案:

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

如果你在巴兹的回答中遇到问题,那么试试看。

1
2
3
4
5
6
7
8
9
10
11
12
13
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)";
        }
    }
}


可以创建一个方法来计算值并返回所需的值。

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

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

1
2
3
4
5
6
7
8
9
10
11
protected String IsLinkableABool(String isLinkable)
{
    if (isLinkable == Boolean.TrueString)
    {
         return"monkeys!!!!!! (please be aware...";    
    }
    else
    {
         return String.Empty;
    }
}


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

所以你可以这样做:

1
2
3
4
5
6
7
protected void DataBound_ItemDataBoundEvent() {
     bool IsLinkable            = (bool)DataBinder.Eval(e.Item.DataItem,"IsLinkable");  
     if(IsLinkable) {
          //do stuff
     }                                    

}

放置条件ASPX页面不是一个好主意。也很混乱。您可以使用三元运算符,但我建议您使用网格视图的行数据绑定事件。步骤1-转到"网格视图属性"。单击"照明"按钮可列出所有事件。步骤2-在rowdatabound上命名并双击

受保护的void onrow(对象发送方、GridViewRowEventArgs e)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   {
    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";
        }
    }
}

对于FormView控制,请参阅此链接。

这是示例代码。我的ASPX页面FormView控件如下:

1
2
3
4
5
6
7
8
9
10
11
12
<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>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:FormView>

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

如果我的eval("PreviousDegreeYN") == True,我想在标签"lblpyn"中显示"是"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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";

    }
}

我们需要看到您的代码的其余部分,但是错误消息给了我一点提示。只有在数据绑定控件内时才能使用eval。中继器、数据报等。

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