[英]ASP.Net conditional databinding
<% if(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) { %>
...
<% } else { %>
...
<% } %>
给我一个 InvalidOperationException? 如何在 ASP 中编写条件 html 生成?
按照 John_ 的状态使用内联语句,或者在执行所需逻辑的代码中创建 function。
protected string MyFunction(int nbrOrders)
{
if(nbrOrders>=Config.MAX_ENQUIRY_SALES)
{
return "TrueResult";
}
else
{
return "FalseResult";
}
}
然后按如下方式使用它
<%# MyFunction(Convert.ToInt32(Eval("NbrOrders"))) %>
编辑:我刚刚阅读了另一篇文章的评论,指出您希望根据此结果显示不同的 HTML。 在这种情况下,您可以尝试使用包含您的代码的占位符的 Visible 标志。 如:
<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>
我不确定你可以为条件绑定添加括号,我知道这样做的唯一方法是使用这样的内联语句:
<%# Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) ? Eval("IfTrueValue") : Eval("IfFalseValue") %>
@Robin Day 的答案的问题是,如果您有数据绑定的子节点,在给定当前 state 的情况下,这些子节点可能有数据,也可能没有数据,则以下代码将失败。 如果您有一个复杂的 object 图,有时很难绕过可空数据绑定代码。
例如,考虑:
<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>
我在您的句子中找不到错误,但是您在 Config.MAX_ENQUIRY_SALES 和 Convert.ToInt32(Eval("NbrOrders")) 之间进行了比较。 这些运算符是否属于同一类型? 你能在你的 web 页面中显示每个的类型吗?
if/else 块在 ASP .NET 中工作,正如您所期望的那样。 以下工作正常。
<% if(DateTime.Now.Second % 2 == 0) { %>
<div>Even</div>
<% } else { %>
<div>Odd</div>
<% } %>
也许您示例中的条件逻辑正在引发异常?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.