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的
请访问: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语法作为三元运算符。
编辑-能够投入到一个简单的数据绑定的情况下,像一个魅力。
你可以使用
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"; } } } |
对于
这是示例代码。我的ASPX页面
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> |
我正在检查
如果我的
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上使用它进行条件处理。