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
editControl est un CustomControl ou un de ses contrôles de base asp .net? –