Потенциально опасное значение Request.Form только из IE8 - PullRequest
1 голос
/ 17 июля 2010

У меня есть современный кнопочный элемент управления в стиле 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>

Эта кнопка отлично работает как с IE, так и с FF, использующими веб-сервер Visual Studio 2010, но при развертывании приложения на сервере (Windows Server 2008 / IIS 7.0) появляется сообщение «Обнаружено потенциально опасное значение Request.Form» ошибка, но только с IE. Похоже, что IE передает разметку ctl00_uxBtn = "

Ответы [ 2 ]

3 голосов
/ 17 июля 2010

Вы должны использовать правильные кавычки:

<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 голос
/ 20 июля 2010

IE настаивает на отправке содержимого между в качестве значения кнопки, и, похоже, нет способа предотвратить это. Итак, мы перехватываем запрос на стороне клиента, используя обработчик события onsubmit следующим образом:

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

Затем наша функция javascript проверяет, является ли браузер IE и если свойство innerHTML кнопки начинается с «<». Если это так, то это разметка, и ASP.Net вызовет ошибку «Потенциально опасное значение Request.Form», поэтому мы устанавливаем значение свойства innerHTML в значение свойства innerText, а затем отправляем форму. Источник для функции javascript: </p>

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