2010-08-16 3 views
2

J'ai Telerik RadGrid avec un formulaire d'édition personnalisé. Dans mon formulaire d'édition, il y a un RadDatePicker auquel j'ai ajouté un modèle de pied de page personnalisé contenant un bouton "Aujourd'hui".Obtenir le code client du contrôle dans le formulaire d'édition RadGrid

Dans l'événement OnClick du bouton j'appelle une fonction Javascript qui prend l'ID de contrôle pour définir la date sélectionnée.

Cependant, étant donné que le contrôle se trouve dans le formulaire d'édition, aucune variable n'est créée pour celui-ci et le compilateur génère une erreur lorsque j'essaie d'obtenir l'ID du client.

Le RadDatePicker est déclaré avec:

<telerik:RadDatePicker ID="ControlName" runat="server" SelectedDate='<%# Bind("Field") %>'> 
    <Calendar ID="Calendar1" runat="server"> 
    <FooterTemplate> 
     <div style="width: 100%; text-align: center; background-color: Gray;"> 
     <input id="Button1" type="button" value="Today" class="button" 
      onclick="GoToToday('<%= ControlName.ClientID %>')" /> 
     </div> 
    </FooterTemplate> 
    </Calendar> 
</telerik:RadDatePicker> 

L'erreur que je reçois est CS0103: The name 'ControlName' does not exist in the current context sur la ligne faisant référence à la ClientID.

Existe-t-il un autre moyen de transmettre l'ID à la fonction Javascript?

+0

J'ai essayé exactement le même code et l'erreur ne se produit pas. J'utilise la version de Telerik 2010.1.519.40 – bodee

Répondre

1

J'ai recouru à l'enveloppement du Telerik RadGrid avec un RadAjaxPanel, puis dans le code côté serveur pour l'événement de liaison I utilisé le panneau Ajax pour définir certaines variables Javascript:

RadAjaxPanel1.ResponseScripts.Add(string.Format("window['ControlNameId'] = '{0}';", ControlName.ClientID)); 

J'ai ensuite ajouté un gestionnaire d'événements côté client à l'DatePicker: ClientEvents-OnPopupOpening="AddButtonClickEvent"

la page comprend alors le suivant Javascript pour lier le gestionnaire d'événements clic en utilisant jQuery:

function AddButtonClickEvent(sender, eventArgs) { 
     var cal = window['ControlNameId']; 
     $('#Button1').bind('click', function() { 
     GoToToday(cal); 
     }); 
    } 

Et tout fonctionne comme prévu.

0

Essayez:

OnClick=<%# "GoToToday('" + ControlName.ClientID + "')" %> 

Vous pouvez également définir le gestionnaire d'événements dans l'événement Page_Load.

+0

Ce code donne la même erreur que je reçois lors du chargement de la page. Je pense que le gestionnaire d'événements devra être ajouté lorsque les données de la grille-lie le formulaire d'édition car le contrôle n'existe pas jusqu'à ce point. –

+0

Oui, j'ai bien peur que tu aies raison. Une douleur, mais pas la première fois que je l'ai vu sur des contrôles tiers ou des modèles –

+0

Enfin eu du temps sur le calendrier du projet pour regarder à nouveau. Malheureusement, le calendrier RadDatePicker n'expose rien dans le pied de page par le biais de sa liste de contrôles, donc le faire dans le code-behind était un non-go. –

0

Peut-être que l'événement ClientEvents-OnLoad des contrôles sur le formulaire vous aidera? Ce n'est pas très beau, mais ça semble marcher.

premier script make page

<script type="text/javascript"> 
    var textBoxFromFormClientObject; 

    function onTextBoxLoad(sender) { 
     textBoxFromFormClientObject = sender; 
    } 
</script> 

Puis, en ASPX, pour le contrôle sur la forme d'édition que vous avez besoin pour obtenir le client, événement ajouter comme celui-ci

<rad:RadTextBox ID="txSomeTextBoxe" runat="server" 
ClientEvents-OnLoad="onTextBoxLoad"/> 

Ainsi, lorsque vous appuyez sur modifier ou insérer le bouton sur la grille, et le formulaire sera affiché - la variable globale en javascript sera définie. Et vous pouvez l'utiliser pour manipuler la zone de texte. Le seul problème est que vous avez besoin d'un tel événement pour chaque contrôle sur le formulaire, si vous voulez manipuler tous les contrôles = (

Questions connexes