<% if(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) { %>
...
<% } else { %>
...
<% } %>
为什么会抛出 InvalidOperationException 异常?如何在 ASP 中编写条件 HTML 生成代码?
按照John_所说的使用内联语句,或在您的代码后台创建一个执行所需逻辑的函数。
protected string MyFunction(int nbrOrders)
{
if(nbrOrders>=Config.MAX_ENQUIRY_SALES)
{
return "TrueResult";
}
else
{
return "FalseResult";
}
}
然后按如下方式使用
<%# MyFunction(Convert.ToInt32(Eval("NbrOrders"))) %>
编辑:我刚刚在另一个帖子的评论中看到了一条声明,它声称你想根据此结果显示不同的HTML。在这种情况下,您可以尝试使用包含代码的占位符的“可见”标志。例如:
<asp:PlaceHolder id="PlaceHolder1" runat="server" visible='<%# (Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES)%>'>
<div>My True Html Here</div>
</asp:PlaceHolder>
<asp:PlaceHolder id="PlaceHolder2" runat="server" visible='<%# !(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES)%>'>
<div>My FalseHtml Here</div>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" Visible="<%# VisibleCondition() %>">
<%# ((string)null).ToString("c") %> //an object that may have null data
//given the visible condition
</asp:PlaceHolder>
VisibleCondition()
返回false
,子控件仍会使用DataBind()
,这可能导致上面示例中的NullReferenceException
。
public class ConditionalPlaceHolder : PlaceHolder
{
protected override void DataBindChildren()
{
if( this.Visible )
{
base.DataBindChildren();
}
}
}
以下是使用方法:
<web:ConditionalPlaceHolder runat="server" Visible="<%# VisibleCondition1() %>">
//whatever databound code
<%# ((string)notNullGivenVisibleCondition1).ToString() %>
<p>But could be given visible condition 2</p>
</web:ConditionalPlaceHolder>
<web:ConditionalPlaceHolder runat="server" Visible="<%# VisibleCondition2() %>">
//whatever databound code
<%# ((string)notNullGivenVisibleCondition2).ToString() %>
<p>But could be given visible condition 1</p>
</web:ConditionalPlaceHolder>
我不确定您是否可以为条件绑定添加括号,我知道的唯一方法是使用内联语句,如下所示:
<%# Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) ? Eval("IfTrueValue") : Eval("IfFalseValue") %>
我在你的句子中找不到错误,但是你在 Config.MAX_ENQUIRY_SALES 和 Convert.ToInt32(Eval("NbrOrders")) 之间进行了比较。它们的运算符类型相同吗?你能在网页上展示每个运算符的类型吗?
if/else语句块在ASP .NET中按照您的预期工作。以下代码可以正常运行。
<% if(DateTime.Now.Second % 2 == 0) { %>
<div>Even</div>
<% } else { %>
<div>Odd</div>
<% } %>
也许你示例中的条件逻辑抛出了异常?