Question

J'ai un contrôle de bouton moderne de style Facebook dont le marquage côté client ressemble à:

<button id="ctl00_uxBtn" value="ctl00$uxBtn" name="ctl00$uxBtn type="submit">
  <div style="background-image: url("Icons/page_edit.png"); background-position: left center; background-repeat: no-repeat; line-height: 16px; padding: 3px 0pt 3px 22px;">Save Draft</div>
</button>

Ce bouton fonctionne bien avec IE et FF à l'aide du serveur Web Visual Studio 2010, mais lorsque je déploierai l'application sur le serveur (Windows Server 2008 / IIS 7.0), je reçois "une demande potentiellement dangereuse.Forme a été détectée"erreur, mais seulement avec IE.Il semble que c'est-à-dire de passer le ctl00_uxbtn="

Était-ce utile?

La solution 2

IE insiste sur l'envoi du contenu entre et comme valeur du bouton, et il n'apparaît pas être un moyen de l'empêcher.Ainsi, nous interceptons la demande du côté client à l'aide d'un gestionnaire d'événements OnSubmit en tant que tel:

<form id="form1" runat="server" onsubmit="fixModernButton()">

Notre fonction JavaScript vérifie alors si le navigateur est IE et si la propriété innerhtml du bouton commence par "<".Si tel est le cas, il s'agit d'une balise et fera que ASP.NET augmente l'erreur "Valeur de demande potentiellement dangereuse", nous définissons donc la valeur de la propriété innerhtml sur la valeur de la propriété Innertext, puis soumettez le formulaire.La source de la fonction JavaScript est:

function fixModernButton() {
    if (navigator.appName === 'Microsoft Internet Explorer') {
        if (document.activeElement.innerHTML && document.activeElement.innerHTML.charAt(0) === '<') {
            document.activeElement.innerHTML = document.activeElement.innerText;
        }
    }
    document.forms['form1'].submit();
}

Autres conseils

Vous devez utiliser les devis appropriés:

<button id="ctl00_uxBtn" value="ctl00$uxBtn" name="ctl00$uxBtn" type="submit">
  <div style="background-image: url('Icons/page_edit.png'); background-position: left center; background-repeat: no-repeat; line-height: 16px; padding: 3px 0pt 3px 22px;">Save Draft</div>
</button>

Je vous recommanderais de ne pas mélanger CSS et marquage et externalisez cette règle dans un CSS séparé:

.edit {
    background-image: url('Icons/page_edit.png'); 
    background-position: left center; 
    background-repeat: no-repeat; 
    line-height: 16px; 
    padding: 3px 0pt 3px 22px;
}

puis appliquez-le à la div:

<button id="ctl00_uxBtn" value="ctl00$uxBtn" name="ctl00$uxBtn" type="submit">
  <div class="edit">Save Draft</div>
</button>

Cela rendra votre balisage beaucoup plus propre, préservez la bande passante et évitez vos erreurs comme celle que vous avez apportée sur l'utilisation des devis appropriés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top