ASP.net页面中的条件逻辑

我有一些代码将数据库值打印到asp.net页面上的转发器控件中。 但是,返回的某些值为null / blank – 这会使得当有空格时结果看起来很难看。

你如何在asp.net控件中执行条件逻辑,即如果存在一个值则打印出一个值,否则只需转到下一个值。

我还应该添加 – 我希望标记也是有条件的,好像没有我不想要的值
标签要么。

下面是一段代码,仅显示我从数据库中获取的值的类型。 ( 地址2通常没有值)。

Company:
Contact Name:
Address:

..................

非常感谢

这将是一个相当主观的,因为它完全取决于你想要处理null / blank值的位置和方式,以及你正在处理的那两个中的哪一个。

例如,有些人喜欢在数据库级别处理空值,有些人喜欢在业务逻辑层中编写默认值,而其他人喜欢在UI处理默认值/空白值 – 更不用说介于两者之间的多种选项。

无论哪种方式,我个人的选择是确保您在UI级别显示该字段没有可用数据以避免混淆。 最糟糕的是:

 <% If (Eval("Address2").Length > 0) Then %><%#Eval("Address2")%><% Else %>No data available for Address 2<% End If %>

这样至少用户知道没有数据可用,而不是不知道是否存在某些系统/管理错误。

希望有所帮助:)

我建议将每个键/值对包装到具有2个属性的自定义控件中。 仅当值不为空时,此控件才会显示自身:

  <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ShowPair.ascx.cs" Inherits="MyWA.ShowPair" %> <% if (!string.IsNullOrEmpty(Value)) { %> <%=Key %> : <%=Value %> <% } %> 

然后将控件放入转发器模板:

        

有可能这样做,我通常使用转发器的事件OnItemDataBound事件,当转发器的项绑定到数据项时发生。

为了解释OnItemDataBound事件,我们假设我们的转发器有一个始终显示的字段(Name)和显示的可选字段(如果不为null)(可选)。 如果可选字段为null或为空,我们还希望显示一些预定义值。
为此,我们首先需要设置转发器的OnItemDataBound事件以指向方法,并且还要构建转发器的项目模板。 我们可以在转发器的项目模板中使用任何服务器控件,稍后我们可以在OnItemDataBound方法中引用它们。

   <%#Eval("Name") %>  

进一步假设我们将绑定一组具有两个属性的简单对象:Name和Option,如下所示:

 public class SimpleEntity { public string Name {get;set;} public string Option {get;set;} } 

接下来我们将实现repeaterResult_ItemDataDataBound方法,如下所示:

 protected void repeaterResult_ItemDataDataBound(object sender, RepeaterItemEventArgs e) { SimpleEntity ent = e.Item.DataItem as SimpleEntity; Literal ltlOption = e.Item.FindControl("ltlOption") as Literal; if (ent != null && ltlOption != null) { if (!string.IsNullOrEmpty(ent.Option)) { ltlOption.Text = ent.Option; } else { ltlOption.Text = "Not entered!"; } } } 

当实现上述方法时,如果存在,我们将显示可选字段,而如果可选字段为空或空字符串,我们将显示预定义字符串“未输入!”。

你可以使用IsDBNull(obj)

 If IsDbNull(<%#Eval("Address2")%>) then etc End If 

我意识到这是一个非常古老的问题,但我想补充一点,处理这个问题的最好方法可能更多是在数据库级别,是的 – 我知道OP没有指定任何类型的数据源。

我只是假设(是的 – 你和我的屁股)当前使用的语言至少是Transact SQL。

为此,我倾向于使用数据源来生成复合字段。 在地址的情况下, ISNULL将愉快地测试以查看正在使用的字段,并在遇到NULL字段时返回默认值。 除此之外,可以包括分隔符以允许目标输出介质中的换行符。 一种选择是使用逗号+一个空格作为分隔符', '

 SELECT ISNULL(src.address1 + ', ', '') + ISNULL(src.address2 + ', ', '') + ISNULL(src.address3 + ', ', '') + ISNULL(src.address4 + ', ', '') + ISNULL(src.postalcode, '') AS CompoundAddress ... 

这通过对自身使用NULL来工作 – 添加到NULL返回NULL ,因此返回的值将包含我们的逗号+空格或它将返回一个空字符串。

可以做类似的事情来“欺骗”Microsoft Access来生成你的地址字段……

 SELECT (src.address1 + ', ') & (src.address2 + ', ') & (src.address3 + ', ') & (src.address4 + ', ') & (src.postalcode) As CompoundAddress ... 

在这种情况下,&符号会将NULL转换为空字符串,但同样仍然适用于将字符串添加到可能的NULL字段。

那么现在,我们可以在HTML中正确输出我们的地址……

 
Company: <%#Eval("CompanyName") %>
Contact Name: <%#Eval("ContactName") %>
Address: <%#Eval("CompoundAddress").ToString().Replace(", ", "
") %>