J'ai construit un certain nombre de contrôles serveur personnalisés et j'appelle régulièrement les fonctions javascript qui sont intégrées dans mes contrôles. Mais je n'ai pas été capable de comprendre comment créer une propriété à laquelle l'utilisateur du contrôle peut ajouter sa propre fonction et sa fonction javascript dans la page contenant le contrôle sera appelée. Je dois faire quelque chose comme OnClientClick
pour un contrôle asp:Button
.Contrôles serveur ASP.Net personnalisés: Comment appeler la fonction javascript dans la page parent
Edit 1:
Merci à la réponse par @ H2015 J'ai fait des progrès à ce sujet.
Dans mon contrôle, je crée une propriété publique pour le script de l'utilisateur,
public string EditAddressScript
{
set
{
string scriptName = "EditAddressScript";
Type csType = this.GetType();
ClientScriptManager csm = Page.ClientScript;
string scriptText = string.Format("function EditAddress() {{{0}}}", value);
csm.RegisterClientScriptBlock(csType, scriptName, scriptText, true);
}
}
Puis dans la section RenderContents
de mon contrôle je vérifie si une valeur a été spécifiée pour EditAddressScript
et créer un bouton si elle a.
output.Write("<input id='btnEdit' type='button' value='Edit Address' style='font-size: 6pt;' onclick='EditAddress();' />");
La page qui utilise ce contrôle crée dynamiquement si je fais quelque chose comme ça,
ECFControls.DefendantAddressReview defendantAddress = new ECFControls.DefendantAddressReview();
divControls.Controls.Add(defendantAddress);
defendantAddress.ClientEditAddressScript = "alert('Hello, World');";
Cela fonctionne, mais est loin d'être optimale.
- Je voudrais définir le script dans la page ASPX et puis juste donner mon contrôle le nom du script, plutôt que de définir la valeur de
EditAddressScript
au code réel javascript. - Dans la section
RenderContents
du contrôle j'ai le nom du script codé en dur je voudrais que ce soit dynamique.
Edit 2:
D'accord, il semble que je faisais ce beaucoup plus compliqué que nécessaire. Tout ce qui est nécessaire est de créer un script dans la page aspx parent et de définir l'événement dans le contrôle de ce script.
Voilà donc ce que j'ai maintenant
script Ajouter à la page ASPX.
function EditAddress() {
alert("Hello, World");
}
Créer une propriété dans le contrôle pour maintenir la valeur (_EditAddressScript
est une variable de chaîne privée dans le contrôle)
public string EditAddressScript
{
set
{
_EditAddressScript = value;
}
}
Puis dans la section RenderContents
du contrôle je vérifie si une valeur a été spécifié pour EditAddressScript
et créer un bouton si c'est le cas.
if(_EditAddressScript.Trim() != "")
output.Write(string.Format("<input id='btnEdit' type='button' value='Edit' style='font-size: 6pt;' onclick='{0}' />", _EditAddressScript));
Créer le contrôle comme celui-ci,
ECFControls.DefendantAddressReview defendantAddress = new ECFControls.DefendantAddressReview();
divControls.Controls.Add(defendantAddress);
defendantAddress.EditAddressScript = "EditAddress()";
Si le contrôle a été créé, je pouvais le faire déclarative,
<ECF:DefendantAddressReview ID="defendantAddressReview" runat="server" EditAddressScript="EditAddress()" />
Y at-il une meilleure approche?
Merci.
Merci, @ h2015. J'ai déjà utilisé cette famille de méthodes, mais il ne semblait pas qu'elles aient été la solution. Je les ai examinés plus en profondeur et j'ai ajouté une solution quelque peu réalisable à ma question initiale. – John