C# ASP.NET在If语句中的.aspx中使用Bind/Eval
在my.aspx中,我希望添加一个基于绑定值的If语句。我尝试了以下方法: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) <%} %> 我们需
<% 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";
}
}
}