2011-04-08 33 views
18

在我的.aspx中我正在寻找基于来自绑定的值添加If语句。我试过以下内容:ASP.NET在.aspx中使用Bind/Eval 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的布尔。我收到以下错误:

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

回答

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

我认为问题是他将语句嵌入到期望表达式的东西中。 – asawyer 2011-04-08 14:44:55

+0

@asawyer听起来对我来说是一个很好的解释。我没有真正想过这种方式,但它非常有意义。 – Bazzz 2011-04-10 14:29:35

+1

这也适用于中继器控制。 – Bern 2013-11-22 15:42:53

0

我们需要查看代码的其余部分,但是错误消息给了我一些提示。当您处于数据绑定控件中时,您只能使用Eval。诸如中继器,数据网格之类的东西。

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

+0

是的,它是在一个ListView控件 – Funky 2011-04-08 14:24:32

14

我敢肯定,你可以这样做以下

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

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

是的,这是C#和你用vb.net,所以你需要用VB语法三元操作符。

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

+1

OP不使用'vb'而是'c#'(见标签),所以你的例子是相关的。我认为你需要用'<%#'来启动它,但如果我错了,请纠正我。 – Bazzz 2011-04-08 16:04:11

+0

@Bazzz哦,看看那个,它是c#。更好!你也是对的,它应该是<%#,我会更新答案。 – asawyer 2011-04-08 16:53:14

1

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

所以,你可以这样做:

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

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

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

我知道这是有点晚了一天这个答案,但对于什么是值得这里是我的问题的解决方案:

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

您可以创建评估值的方法和返回你想要的值。

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

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

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

真棒解决方案...对不起,帽子!你救了我的一天:) – SearchForKnowledge 2014-10-20 15:29:35

5

您可以使用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> 
0

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

保护无效onrow(对象发件人,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"; 
     } 
    } 
} 
1

OMG这完全花了太长时间来搞清楚......

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

formula.type是一个链接表的int列。感谢其他贡献以获得我的决议。