【问题标题】:ASP.NET inline scriptingASP.NET 内联脚本
【发布时间】:2010-09-23 18:36:31
【问题描述】:

我有一个 DateTime 对象,我需要在自定义网格控件中打印它。 我要打印的数据类型是 dd-mm-yyyy 格式的日期。 该值可以是填充的,也可以是空白的。 如果它被填充,它将被解析为DateTime,然后打印为默认的ToString

对于每一行,我可以使用

<CellTemplate>
    <asp:Literal ID="Literal2" runat="server" Text="<%# Container.Value %>"></asp:Literal>
</CellTemplate>

但这会打印日期的默认长版本。我想要ToShortDateString()的格式。

所以我尝试修改为:

<CellTemplate>
    <asp:Literal ID="Literal2" runat="server" Text="<%# Convert.ToDateTime(Container.Value).ToShortTimeString()%>"></asp:Literal>
</CellTemplate>

这按预期工作。

现在我遇到了空日期的问题,

Convert.ToDateTime()

在空字符串上,它将打印默认的 DateTime。

有没有一种方法可以在我的 aspx 代码中创建一个 If 语句,如果它不是空字符串,则只执行 Convert.ToDateTime

【问题讨论】:

    标签: c# asp.net scripting inline


    【解决方案1】:
    Container.Value.Length > 0 ? Convert.ToDateTime(Container.Value).ToShortTimeString() : ""
    

    您还应该能够将Container.Value 传递给您定义的范围内的任何方法。

    【讨论】:

      【解决方案2】:

      您可以在代码中使用受保护的方法来为您进行检查

      protected static string ConvertDate(object date) {
          if (date == null)
             return string.Empty;
          return Convert.ToDateTime(date).ToShortTimeString();
      }
      

      【讨论】:

      • 您可以通过使用 DateTime 来避免装箱吗? (可为空)
      • 这是个好主意。最终我的后备解决方案。但是,我想学习如何纯粹在 apsx 页面内执行此操作。
      • 这取决于从数据源返回什么类型的对象
      • 我相信类型是字符串
      • 您应该可以使用marxidad的答案。尝试将他的脚本块直接放入没有文字 0 的单元格模板中? Convert.ToDateTime(Container.Value).ToShortTimeString() : "" %>
      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 2021-10-10
      • 2011-06-26
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2010-10-28
      相关资源
      最近更新 更多