2011-02-28 2 views
0

Je me demande si quelqu'un sait d'une façon de permettre à quelque chose comme « < < » à soumettre, sans réglage validateRequest = falsePermettre « << » à soumettre, sans désactiver « validateRequest »

I un analyseur Creole, et le plugin recommandé/syntaxe macro est:

<<macro-name argo0=foo arg1=bar argN=qux>> 
+0

Soumis à quoi? Vous devriez pouvoir mettre n'importe quelle valeur que vous voulez dans une boîte de texte par exemple. – recursive

Répondre

2

J'ai écrit une petite fonction JavaScript 'encodeMyHtml' qui est appelée sur l'événement OnClick lorsque le bouton d'envoi du formulaire HTML est cliqué. La fonction code l'entrée HTML de l'utilisateur pour le champ que j'ai spécifié dans une chaîne inoffensive avant qu'elle ne soit transmise au serveur. Quand je reçois cette entrée sur le serveur, je décrypte simplement et continue mon chemin.

ValidateRequest est heureux, nos utilisateurs sont heureux, nos pairs sont heureux, nous sommes heureux.

J'ajoute ma fonction JavaScript 'encodeMyHtml' dans la méthode OnPageLoad de mon contrôle utilisateur. De cette façon, je peux m'assurer que mon JavaScript n'est ajouté qu'une seule fois à la page parente, quel que soit le nombre de contrôles sur la page.

Dans mon OnPageLoad de contrôle Je l'appelle:

private void addEditorJavaScript() 
{ 
    // create our HTML encoder javascript function 
    // this way it shows up once per page that the control is on 
    string scr = @"<script type='text/javascript'>function encodeMyHtml(name){ 
       var content = document.getElementById(name).value 
       content = content.replace(/</g,'<'); 
       content = content.replace(/>/g,'>'); 
       document.getElementById(name).value = content; 
      }</script>"; 

    // add the javascript into the Page 
    ClientScriptManager cm = Page.ClientScript; 
    cm.RegisterClientScriptBlock(this.GetType(), "GlobalJavascript", scr); 
} 

Dans ASPX de mon contrôle, je suis sur un gridview. J'enveloppe la mise à jour de la grille grid: LinkButton dans une balise span, et dans cette balise span je mets mon OnClickEvent.

<span onclick="encodeMyHtml('<%# UniqueID.Replace("$", "_") %>_FormViewContentManager_ContentTextBox')"> 
    <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="[Publish]" /> 
</span><span onclick="encodeMyHtml(' 

Quand je reçois l'entrée du côté du serveur que j'appelle simplement quelques remplaceraient les méthodes sur la chaîne d'entrée pour décoder le HTML, et je suis fait.

1

Vous pouvez faire un javascript regex remplacer pour « < \ S » sur le terrain spécifique sur le formulaire soumettre. Mais cela échouerait pour les navigateurs qui ne supportent pas javascript.

0

Vous pouvez encoder le « < < » sur le client en utilisant Javascript:

<script language="javascript"> 
function encodeString(str) { 
    return str.replace(/</gi, '&lt;').replace(/>/gi, '&gt;'); 
} 
</script> 

Et puis sur l'utilisation du serveur Server.HtmlDecode pour retourner la chaîne à sa forme originale.

Questions connexes