<% if(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) { %>
...
<% } else { %>
...
<% } %>
Предоставляет мне InvalidOperationException? Как написать условное генерирование html в ASP?ASP.Net условная привязка данных
<% if(Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) { %>
...
<% } else { %>
...
<% } %>
Предоставляет мне InvalidOperationException? Как написать условное генерирование html в ASP?ASP.Net условная привязка данных
использовать встроенный оператор, как John_ состояния, или , создайте функцию в вашем коде, которая выполняет требуемую логику.
protected string MyFunction(int nbrOrders)
{
if(nbrOrders>=Config.MAX_ENQUIRY_SALES)
{
return "TrueResult";
}
else
{
return "FalseResult";
}
}
Затем используйте это следующим
<%# MyFunction(Convert.ToInt32(Eval("NbrOrders"))) %>
EDIT: Я только что прочитал комментарий на другой пост, который заявляет вы хотите, чтобы показать различный 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>
Я не могу найти что-то не так в ваших предложениях, но сравниваю вас между Config.MAX_ENQUIRY_SALES и Convert.ToInt32 (Eval («NbrOrders»)). Являются ли эти операторы одного типа? Можете ли вы показать тип каждого из них на своей веб-странице?
Я не уверен, что вы можете добавить скобки для условной привязки, единственным способом я знаю это делать это с инлайн заявлением, как так:
<%# Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) ? Eval("IfTrueValue") : Eval("IfFalseValue") %>
Да, я подозревал это ... моя проблема в том, что мне нужно генерировал кучу html в каждом случае ... Вся точка сортировки ASP теряется ... –
@Neils Bosma. Это был бы мой ответ. Вы не сможете смешивать HTML с привязками Eval, но HTML все равно может быть сгенерирован в вашей функции, а затем помещен в datacolumn, который вы связываете, а затем вызывается с Eval («YourColumn»). – vapcguy
if/else блокирует работу в ASP.NET, как вы ожидаете от них. Следующие работы просто прекрасны.
<% if(DateTime.Now.Second % 2 == 0) { %>
<div>Even</div>
<% } else { %>
<div>Odd</div>
<% } %>
Возможно, условная логика в вашем примере бросает исключение?
Я думаю, что это Eval, который вызывает проблему. Вы не можете использовать условную логику в привязке данных. –
Это не показывает выражение привязки данных. –
Проблема с ответом @Robin Day заключается в том, что следующий код выходит из строя, если у вас есть дочерние базы данных, которые могут иметь или не иметь данных, учитывая текущее состояние того, что вы делаете. Иногда бывает сложно выполнить маневр вокруг нулевого кода привязки данных, если у вас есть сложный граф объектов.
Для примера рассмотрим:
<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>
EDIT - действительно полезный совет. Благодарю. –