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は使用できません。

同じことを実現する1つの方法は、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 に答える