我有一个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)时,我收到“检测到潜在危险的Request.Form值”错误,但仅限于IE。 IE似乎正在传递Request.Form集合中的ctl00_uxBtn =“&lt; div style =”background-image:...“标记,IIS正确地将其解释为潜在的脚本注入漏洞。我可以告诉你,FF传递ctl00_uxBtn =“ctl00 $ uxBtn”这是完全可以接受的。有没有办法强制IE进入更像FF的行为?我不想禁用请求验证。
答案 0 :(得分:3)
您需要使用正确的引号:
<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>
这将使您的标记更清晰,保留带宽并避免您使用正确引号所做的错误。
答案 1 :(得分:1)
IE坚持在&lt; button&gt;之间发送内容和&lt; / button&gt;作为按钮的值,似乎没有办法防止它。因此,我们使用onsubmit事件处理程序拦截客户端上的请求:
<form id="form1" runat="server" onsubmit="fixModernButton()">
我们的javascript函数然后检查浏览器是否是IE以及按钮的innerHTML属性是否以“&lt;”开头。如果是这样,它是标记并将导致ASP.Net引发“可能危险的Request.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();
}