2010-04-29 3 views
2

j'ai un répéteur qui est lié à un certain nombre de l'événement ItemDataBound pour le répéteur dataitems personnalisés/typescontrôle de validation incapable de trouver son contrôle pour valider

le code appelle une fonction renderedit que selon le type de données personnalisé rendra un contrôle personnalisé. il sera également (si l'indicateur de validation est défini) rendre un contrôle de validation pour le contrôle d'édition rendered approprié

le contrôle d'édition remplace la méthode CreateChildControls() pour le contrôle personnalisé en ajoutant un certain nombre de literalControls ainsi

protected override void CreateChildControls() 
{ 
    //other bits removed - but it is this 'hidden' control i am trying to validate 
    this.Controls.Add(new LiteralControl(string.Format(
             "<input type=\"text\" name=\"{0}\" id=\"{0}\" value=\"{1}\" style=\"display:none;\" \">" 
             , this.UniqueID 
             , this.MediaId.ToString()) 
             )); 
    //some other bits removed 
} 

le contrôle de validation est rendu comme celui-ci: où le passé en editcontrol est l'instance de contrôle dont les CreateChildControls ci-dessus est une méthode de ..

public override Control RenderValidationControl(Control editControl) 
{ 
    Control ctrl = new PlaceHolder(); 

    RequiredFieldValidator req = new RequiredFieldValidator(); 
    req.ID = editControl.ClientID + "_validator"; 
    req.ControlToValidate = editControl.UniqueID; 
    req.Display = ValidatorDisplay.Dynamic; 
    req.InitialValue = "0"; 
    req.ErrorMessage = this.Caption + " cannot be blank"; 
    ctrl.Controls.Add(req); 

    return ctrl; 
} 

le problème est, altho les commandes de validation .ControlToVa La propriété lidate est définie sur l'uniqueid du contrôle d'édition. lorsque je clique sur la page, j'obtiens l'erreur suivante: Impossible de trouver l'ID de contrôle 'FieldRepeater $ ctl01 $ ctl00' référencé par la propriété 'ControlToValidate' de 'FieldRepeater_ctl01_ctl00_validator'.

J'ai essayé de changer le littéral dans le createchildcontrols à un nouveau TextBox(), et puis mettre l'id etc alors, mais je reçois un problème similaire.

quelqu'un peut-il m'éclairer? est-ce dû à l'ordre dans lequel les contrôles sont rendus? c'est-à-dire que le contrôle de validation est écrit avant l'editcontrol? ou ...

de toute façon une aide très appréciée

grâce

nat

+0

editControl est un CustomControl ou un de ses contrôles de base asp .net? –

Répondre

2

Vous devez utiliser editControl.ID pas editControl.UniqueID

prennent également en compte que si editControl doit être quelque chose qui peut être utilisé avec un vaidator de champ requis. Cela n'a aucun sens pour ce validateur pour TOUS les contrôles d'entrée.

EDIT
Cochez ce lien. Il peut être utile car il est exactement ce dont vous avez besoin
http://support.microsoft.com/kb/310082

+0

salut merci pour votre réponse oui j'ai un certain nombre de ovverides pour différents types de données personnalisés pour la validation. mais je devrais utiliser editControl.ID même si le contrôle est rendu avec id et name = this.UniqueID? – nat

+0

donc je ne peux pas valider cela du tout? même si le contrôle editControl contient une zone de texte standard? Puis-je utiliser un validateur personnalisé? merci – nat

+0

salut encore merci pour cela, en ajoutant la validationproperty a fait l'affaire – nat

Questions connexes