template net mvc kendo ejemplos editable asp c# asp.net-mvc telerik telerik-grid

c# - net - telerik grid mvc



Telerik grid ClientTemplate (4)

Client Template es un código de JavaScript que se ejecutará en el cliente y el resultado se transformará en una cadena y se utilizará en este lugar. Por lo tanto, no puede usar string.Empty en su ClientTemplate y debería usar '''' en lugar de hacerlo.

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

Intento usar C # para aplicar un poco de lógica cuando visualizo un DateTime en una grilla telerik en mi aplicación MVC, pero estoy teniendo problemas para ponerlo en funcionamiento. Mi primer problema es que no entiendo exactamente cómo funciona la llamada de ClientTemplate. Tampoco pude encontrar documentación que explicara cómo funciona. Entonces, una explicación de cómo funciona eso sería útil, y luego tal vez específicamente lo que está mal con mi ejemplo:

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

ACTUALIZAR:

Fui con la sugerencia de Daniel. Acabo de llamar a esta función desde ClientTemplate (). Aquí está el código final:

// 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); } }


Definiría otro par de propiedades en el Modelo para hacer que ClientTemplate sea más limpio:

public bool HasSetupDate { get { return this.SetupDate != DateTime.Min && this.SetupDate != null; } } public string SetupDate_Str { get{ return this.SetupDate.ToString("MM/dd/yyyy"); } }

Entonces ClientTemplate se ve así: .ClientTemplate ("<# = HasSetupDate? SetupDate_Str: '''' #>")


Primero, es posible que desee asegurarse de que SetupDate funcione por sí mismo. Si lo hace, puedes intentar agregar paréntesis.

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

O puede intentar usar una instrucción if.

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

Actualización La respuesta de NullReference está justo donde dice que no se puede usar c # en ClientTemplate. Entonces no puedes usar DateTime.Min o string.Empty.

Una forma de lograr lo mismo es usar una función de JavaScript. Defina la columna como esta:

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

A continuación, agregue la función javascript, checkDate (). (Puede haber una forma mejor de encontrar el valor mínimo, pero getMilliseconds debería ser 0 si es un valor mínimo).

<script> function checkDate(setupDate) { if ((setupDate.getMilliseconds() === 0) || (setupDate === null)) return ''''; else return setupDate; } </script>


Las plantillas del lado del cliente se ejecutan en el cliente en JavaScript, por lo que no puede usar C #. Cualquier cosa rodeada por "<# #>" corresponde a las propiedades de su modelo. He encontrado que el mejor lugar para encontrar estas cosas es ver las páginas de demostración de Telerik aquí .