我有一个Facebook风格的现代按钮控制,其客户端侧标记看起来像:

<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>
.

此按钮使用Visual Studio 2010 Web服务器与IE和FF一起工作,但是当我将应用程序部署到服务器时(Windows Server 2008 / IIS 7.0),我得到“潜在的危险请求。检测到”错误,但只有IE。看来,IE是通过CTL00_UXBTN=“

有帮助吗?

解决方案 2

IE坚持在<按钮>和之间作为按钮的值发送内容,并且似乎没有阻止它的方法。因此,我们使用Onsubmit事件处理程序拦截客户端上的请求,如下所示:

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

我们的JavaScript函数然后检查浏览器是否具有IE,如果按钮的innerHTML属性以“<”开头。如果是,它是标记,并将导致ASP.NET提高“潜在危险的请求.Form值”错误,因此我们将innerhtml属性的值设置为Innertext属性的值,然后提交表单。JavaScript函数的源是:

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();
}
.

其他提示

您需要使用正确的引号:

<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>
.

我会建议您没有将CSS和标记混合并将此规则外化为单独的CSS:

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

然后将其应用于div:

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

这将使您的标记更清洁,保留带宽,并避免使用您使用适当引号所做的错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top