Telerik grille ClientTemplate
Je suis en train d'utiliser C# pour mettre un peu de logique lors de l'affichage d'un DateTime dans un telerik grille dans mon application MVC, mais je suis un peu de mal à la faire fonctionner. Mon premier problème est que je ne comprends pas exactement comment le ClientTemplate appel fonctionne. Je n'ai pas réussi à trouver de la documentation expliquant comment il travaille, que ce soit. Donc, une explication de comment cela fonctionne serait utile, et puis peut-être précisément ce qui ne va pas avec mon exemple:
columns.Bound(p => p.SetupDate).ClientTemplate("<#= SetupDate == DateTime.Min || SetupDate == null ? string.empty : SetupDate #>")
Mise à JOUR:
Je suis allé avec Daniel suggestion. Je viens d'appeler cette fonction à partir de ClientTemplate(). Voici le code 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);
}
}
Je ne pense pas que vous pouvez ajouter de la logique, comme dans le modèle client. Vous aurez envie de mettre de la logique dans votre modèle.
Si je comprends bien, si je devais mettre de la logique dans le modèle (c'est à dire, pour renvoyer une chaîne vide dans certains cas, dans ce cas, je serais en utilisant un type de chaîne au lieu d'un type DateTime dans la grille), puis le tri ne fonctionne pas correctement. C'est vraiment l'ensemble du problème, je vais essayer de résoudre ici. Toutes les suggestions sont les bienvenues.
Si le tri est le vrai problème, je serais probablement faire une autre propriété de trier par dans le modèle, peut-être un int, et utiliser le SetUpDate pour la remplir. Ensuite, vous pouvez formater vos dates comme des chaînes de caractères pour l'affichage souhaité et ne pas perdre la capacité de garder la liste triée correctement
Si je comprends bien, si je devais mettre de la logique dans le modèle (c'est à dire, pour renvoyer une chaîne vide dans certains cas, dans ce cas, je serais en utilisant un type de chaîne au lieu d'un type DateTime dans la grille), puis le tri ne fonctionne pas correctement. C'est vraiment l'ensemble du problème, je vais essayer de résoudre ici. Toutes les suggestions sont les bienvenues.
Si le tri est le vrai problème, je serais probablement faire une autre propriété de trier par dans le modèle, peut-être un int, et utiliser le SetUpDate pour la remplir. Ensuite, vous pouvez formater vos dates comme des chaînes de caractères pour l'affichage souhaité et ne pas perdre la capacité de garder la liste triée correctement
OriginalL'auteur birdus | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
D'abord, vous pouvez vous assurer que SetupDate fonctionne par lui-même. Si c'est le cas, vous pouvez essayer d'ajouter des parenthèses.
Ou vous pouvez essayer d'utiliser une instruction if.
Mise à jour
La réponse par NullReference est exactement où il est dit que vous ne pouvez pas utiliser le c# dans le ClientTemplate. Si vous ne pouvez pas utiliser DateTime.Min ou chaîne.Vide.
Un moyen d'atteindre la même chose est d'utiliser une fonction javascript. Définir la colonne comme suit:
Puis ajouter le javascript de la fonction checkDate(). (Il peut y avoir une meilleure façon de trouver des valeurs min, mais getMilliseconds devrait être 0 si c'est une valeur min.)
Bien que je n'ai pas d'utiliser votre code exact, j'ai fait d'utiliser votre idée. Je vais poster la version finale du code ci-dessus dans la question. Merci!
Qui ressemble à une bonne façon de le faire. J'aime la façon dont vous mettez le format de la date dans la fonction.
OriginalL'auteur Daniel
Côté Client, les modèles sont exécutés sur le client en javascript, donc vous ne pouvez pas utiliser le C#. Rien entourée par la "<# #>" correspondent à des propriétés sur votre modèle. J'ai trouvé le meilleur endroit pour trouver ce genre de choses, c'est de bien regarder Telerik de la démonstration de pages ici.
ne veut pas dire qu'il est exécuté sur le serveur. C'était la manière avec asp.net mais c'est purement du client liaison côté.
OriginalL'auteur NullReference
Client Modèle est un code javascript qui sera exécuté sur le client et le résultat sera transformé à la chaîne et utilisés sur ce lieu. Donc vous ne pouvez pas utiliser des chaînes de caractères.Vide dans votre ClientTemplate et doit utiliser " au lieu de lui.
OriginalL'auteur Kirill Bestemyanov
Je voudrais définir un autre couple de propriétés sur le Modèle pour faire le ClientTemplate nettoyant:
Puis ClientTemplate ressemble à ça:
.ClientTemplate("<#=HasSetupDate ? SetupDate_Str : "#>")
Je pense que vous vous trompez sur le tri problème. ClientTemplate est utilisé pour afficher les données. Sur la définition de la colonne de vous lier à certains biens (ici il est .BindTo(m => m.SetupDate) ), et cette propriété est utilisée pour trier un tableau. De plus, le tri se passe côté serveur (une requête Ajax est envoyée et la table sera mise à jour avec de nouvelles données).
OriginalL'auteur Rustam