4

在我的 MVC 应用程序的 Telerik 网格中显示 DateTime 时,我正在尝试使用 C# 应用一些逻辑,但是在使其正常工作时遇到了一些麻烦。我的第一个问题是我不完全了解 ClientTemplate 调用的工作原理。我也找不到解释它是如何工作的文档。所以,解释它是如何工作的会很有帮助,然后可能特别是我的例子有什么问题:

columns.Bound(p => p.SetupDate).ClientTemplate("<#= SetupDate == DateTime.Min || SetupDate == null ? string.empty : SetupDate #>")

更新:

我同意了丹尼尔的建议。我只是从 ClientTemplate() 调用这个函数。这是最终代码:

// Setup a minDate to mimic C#'s Date.MinDate constant.
var minDate = new Date();
minDate.setFullYear(1, 0, 1);
minDate.setHours(0, 0, 0, 0);

function checkDateWithFormat(d, f)
{
    if (d.getTime() == minDate.getTime())
    {
        return "";
    }
    else
    {
        return d.toString(f);
    }
}
4

4 回答 4

9

首先,您可能要确保 SetupDate 自己工作。如果是这样,您可以尝试添加括号。

columns.Bound(p => p.SetupDate).ClientTemplate("<#= ((SetupDate == DateTime.Min) || (SetupDate == null)) ? string.Empty : SetupDate #>")

或者您可以尝试使用 if 语句。

columns.Bound(p => p.SetupDate).ClientTemplate("<# if ((SetupDate != DateTime.Min) && (SetupDate != null)) { #><#= SetupDate #><# } #>")

更新 NullReference 的答案是正确的,它说您不能在 ClientTemplate 中使用 c#。所以你不能使用 DateTime.Min 或 string.Empty。

实现相同目的的一种方法是使用 javascript 函数。像这样定义列:

columns.Bound(p => p.SetupDate).ClientTemplate("<#= checkDate(SetupDate) #>")

然后添加 javascript 函数 checkDate()。(可能有更好的方法来找到最小值,但如果它是最小值,getMilliseconds 应该是 0。)

<script>
  function checkDate(setupDate) {
    if ((setupDate.getMilliseconds() === 0) || (setupDate === null))
      return '';
    else
      return setupDate;
  }
</script>
于 2012-07-30T15:41:10.373 回答
4

客户端模板在 javascript 中的客户端上执行,因此您不能使用 C#。任何被“<# #>”包围的内容都对应于模型上的属性。我发现找到这些东西的最佳位置是在此处查看 Telerik 的演示页面。

于 2012-07-30T15:33:40.423 回答
0

客户端模板是将在客户端执行的javascript代码,其结果将转换为字符串并在此位置使用。所以你不能在你的 ClientTemplate 中使用 string.Empty 并且应该使用 '' 代替它。

columns.Bound(p => p.SetupDate)
       .ClientTemplate("<#= (SetupDate == DateTime.Min) || (SetupDate == null) ? '' : SetupDate #>")
于 2012-07-30T17:20:53.900 回答
0

我会在模型上定义另外几个属性以使 ClientTemplate 更干净:

public bool HasSetupDate {
  get {
    return this.SetupDate != DateTime.Min && this.SetupDate != null;
  }
}

public string SetupDate_Str {
  get{
    return this.SetupDate.ToString("MM/dd/yyyy");
  }
}

然后 ClientTemplate 看起来像这样: .ClientTemplate("<#=HasSetupDate ? SetupDate_Str : '' #>")

于 2012-07-30T19:02:56.127 回答