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

C# ASP.NET在If语句中的.aspx中使用Bind/Eval,c#,if-statement,eval,bind,webforms,C#,If Statement,Eval,Bind,Webforms,在my.aspx中,我希望添加一个基于绑定值的If语句。我尝试了以下方法: <% if(bool.Parse(Eval("IsLinkable") as string)){ %> monkeys!!!!!! (please be aware there will be no monkeys, this is only for humour purposes) <%} %> 我们需

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

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

我们需要查看代码的其余部分,但是错误消息给了我一些提示。您只能在数据绑定控件内使用Eval。中继器、数据网格等


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

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

请看这里:

将为绑定到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)";
    }
}

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

(注意,我手头没有一个编译器来测试确切的语法)

text=''
是的,这是c#和你的使用vb.net,所以你需要对三元运算符使用vb语法


编辑-能够进入一个简单的数据绑定情况,工作起来很有魅力。

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

所以你可以做:

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

}

有关
FormView
控件的信息,请参阅

下面是示例代码。我的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>

如果您在获取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)";
        }
    }
}

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

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

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

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

您可以使用
asp:PlaceHolder
,并在可见位置放置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>

猴子!!!!!!
(请注意不会有猴子,这只是出于幽默目的)

将条件设置为aspx页面不是一个好主意,也很混乱。 可以使用三元运算符,但我建议使用网格视图的rowdatabound事件。 步骤1-转到栅格视图属性。单击照明按钮列出所有事件。 步骤2-在rowdatabound上指定名称并双击

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


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


内容


type是链接表的int列。感谢您为我的解决方案所做的其他贡献。

我认为问题在于,他正在将一个语句嵌入到需要表达式的内容中。@asawyer对我来说似乎是一个很好的解释。我真的没有这样想过,但它非常有意义。这也适用于中继器控件。OP使用的不是
vb
,而是
c#
(参见标记),因此您的示例是相关的。我想你需要从
@Bazzz开始哦,看,这是c#。更好!而且你是对的,这应该是很棒的解决方案。。。对不起,帽子!你救了我一天:)
<%# (bool)Eval("IsLinkable") ? "monkeys!!!!!!" : "" %>
<%# IsLinkableABool( Eval("IsLinkable") ) %>
protected String IsLinkableABool(String isLinkable)
{
    if (isLinkable == Boolean.TrueString)
    {
         return "monkeys!!!!!! (please be aware...";    
    }
    else
    {
         return String.Empty;
    }
}
   <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>
   {
    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";
        }
    }
}