2009-03-17 3 views

ответ

26

использовать встроенный оператор, как 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> 
+3

EDIT - действительно полезный совет. Благодарю. –

-1

Я не могу найти что-то не так в ваших предложениях, но сравниваю вас между Config.MAX_ENQUIRY_SALES и Convert.ToInt32 (Eval («NbrOrders»)). Являются ли эти операторы одного типа? Можете ли вы показать тип каждого из них на своей веб-странице?

5

Я не уверен, что вы можете добавить скобки для условной привязки, единственным способом я знаю это делать это с инлайн заявлением, как так:

<%# Convert.ToInt32(Eval("NbrOrders"))>=Config.MAX_ENQUIRY_SALES) ? Eval("IfTrueValue") : Eval("IfFalseValue") %> 
+0

Да, я подозревал это ... моя проблема в том, что мне нужно генерировал кучу html в каждом случае ... Вся точка сортировки ASP теряется ... –

+0

@Neils Bosma. Это был бы мой ответ. Вы не сможете смешивать HTML с привязками Eval, но HTML все равно может быть сгенерирован в вашей функции, а затем помещен в datacolumn, который вы связываете, а затем вызывается с Eval («YourColumn»). – vapcguy

-1

if/else блокирует работу в ASP.NET, как вы ожидаете от них. Следующие работы просто прекрасны.

<% if(DateTime.Now.Second % 2 == 0) { %> 
<div>Even</div> 
<% } else { %> 
<div>Odd</div> 
<% } %> 

Возможно, условная логика в вашем примере бросает исключение?

+0

Я думаю, что это Eval, который вызывает проблему. Вы не можете использовать условную логику в привязке данных. –

+1

Это не показывает выражение привязки данных. –

4

Проблема с ответом @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> 
Смежные вопросы