2009-12-30 1 views

ответ

60

Вы также можете создать публичный метод на странице, а затем вызвать это из кода спереди.

например. при использовании C#:

public string ProcessMyDataItem(object myValue) 
{ 
    if (myValue == null) 
    { 
    return "0 value"; 
    } 

    return myValue.ToString(); 
} 

Затем метка на передней код-в-будет что-то вроде:

<asp:Label ID="Label18" Text='<%# ProcessMyDataItem(Eval("item")) %>' runat="server"></asp:Label> 

К сожалению, не проверял этот код, не может гарантировать, я получил синтаксис от "<%# ProcessMyDataItem(Eval("item")) %>" совершенно правильно.

+7

Я сделал чек в <%# %> теги и == null не идентифицировали нулевые значения; Мне пришлось использовать == DBNull.Value. – user467384

+0

Где я могу добавить это в свой код здесь: http://stackoverflow.com/questions/27237555/why-empty-cell-throws-an-error-during-sql-stored-procedure-execution – SearchForKnowledge

+0

Стоит дополнительная проверка см., если myValue.ToString() также пуст. Например, Eval («MyDate», «{0: d}») дает пустую строку, если MyDate является объектом DateTime с нулевым значением. –

0

Попробуйте заменить <%# Eval("item") %> на <%# If(Eval("item"), "0 value") %> (или <%# Eval("item") ?? "0 value" %>, при использовании C#).

+0

Я не протестировал ваш код, но «<% # If (Eval (« item »),« 0 value »)%>« выглядит немного странно. Не уверен, что вы действительно можете использовать оператор If с Eval, как это, и не приведет ли результат только к возврату True/False? –

+0

Нет, это двоичный оператор VB.NET 'If':' If (value, valueIfNull) ': http://msdn.microsoft.com/en-us/library/bb513985.aspx – Heinzi

0

Использование IIF.

<asp:Label ID="Label18" Text='<%# IIF(Eval("item") Is DBNull.Value,"0", Eval("item") %>' 
runat="server"></asp:Label> 
41

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

<%#(String.IsNullOrEmpty(Eval("Data").ToString()) ? "0" : Eval("Data"))%> 

Вы также можете использовать следующие для обнуляемого значений:

<%#(Eval("Data") == null ? "0" : Eval("Data"))%> 

Кроме того, если вы используете .net 4.5 и выше Я предлагаю вам использовать strongly typed data binding:

<asp:Repeater runat="server" DataSourceID="odsUsers" ItemType="Entity.User"> 
    <ItemTemplate> 
     <%# Item.Title %> 
    </ItemTemplate> 
</asp:Repeater> 
+0

Не будет ли это исключение, если Eval («Данные») имеет значение NULL? – KannedFarU

+1

Если значение DBNull.Value, то оно не будет. Пример: объект a = DBNull.Value; Response.Write (a.ToString()); –

+1

Хорошо правый DBNull.Value не является действительным null ... – KannedFarU

4

Он должен работать, а

Eval("item") == null?"0": Eval("item"); 
1

попробовать этот код может быть полезным -

<%# ((DataBinder.Eval(Container.DataItem,"ImageFilename").ToString()=="") ? "" :"<a 
href="+DataBinder.Eval(Container.DataItem, "link")+"><img 
src='/Images/Products/"+DataBinder.Eval(Container.DataItem, 
"ImageFilename")+"' border='0' /></a>")%> 
13

Я использую следующие для VB.Net:

<%# If(Eval("item").ToString() Is DBNull.Value, "0 value", Eval("item")) %> 
+0

Куда бы я добавил это к моему коду здесь: http://stackoverflow.com/questions/27237555/why-empty-cell-throws-an-error-during- SQL-хранимая процедура-исполнение – SearchForKnowledge

0

Я попробовал этот код и он работает хорошо как для нулевых и пустых ситуаций:

'<%# (Eval("item")=="" || Eval("item")==null) ? "0" : Eval("item")%>' 
0

Используется модифицированная версия ответа Джейсона:

public string ProcessMyDataItem(object myValue) 
{ 
    if (myValue.ToString().Length < 1) 
    { 
    return "0 value"; 
    } 

    return myValue.ToString(); 
}