Telerik网格ClientTemplate

时间:2012-07-30 15:21:47

标签: c# asp.net-mvc telerik telerik-grid

我正在尝试使用C#在我的MVC应用程序中的telerik网格中显示DateTime时应用一些逻辑,但是在使其工作时遇到一些麻烦。我的第一个问题是我不完全理解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 个答案:

答案 0 :(得分:8)

首先,您可能希望确保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>

答案 1 :(得分:4)

客户端模板在javascript中在客户端上执行,因此您无法使用C#。任何被“&lt; ##&gt;”包围的东西对应于模型上的属性。我发现找到这些东西的最佳位置是查看Telerik的演示页面here

答案 2 :(得分:0)

客户端模板是将在客户端上执行的javascript代码,其结果将转换为字符串并在此处使用。因此,您无法在ClientTemplate中使用string.Empty,而应使用&#39;&#39;而不是它。

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

答案 3 :(得分:0)

我会在Model上定义另外两个属性以使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(“&lt;#= HasSetupDate?SetupDate_Str:''#&gt;”)