При разработке очередного ASP.Net приложения, столкнулись с проблемой "A potentially dangerous Request.Form value was detected from the client" при вызове PostBack на странице.
В предисловии: есть очень простой приложение, в левой части строится дерево при клике на вершину которого, в правой части отображается необходимая информация.
Проблема как раз и возникла в клиентском обработчике события при клике на вершину дерева. В данном обработчике записывается необходимое значение в скрытое поле:
<asp:HiddenField ID="ID1" runat="server" />
и инициализируется срабатывание клике по скрытой скрытой кнопки:
<asp:Button ID="Button1" runat="server" style="display:none;" OnClick="ButtonSurvey_Click" />
сам js-скрипт выглядит так:
function clickTree(Target, Event) {
$("#ID1").val(Event.TreeNode.getValue());
$("#Button1").click();
}
После долгих разбирательств, выяснилось, что сам компонент дерева генерирует скрытое поле (HiddenField) и в него пишет xml, и именно на это ругается ValidateRequest (подробное описание как это происходит можно почитать в MSDN)
После интенсивных поисков в просторах интернета, поняли что надо отключить данную проверку и добавили в заголовок страницы директиву ValidateRequest="false" и в web.config секцию:
В предисловии: есть очень простой приложение, в левой части строится дерево при клике на вершину которого, в правой части отображается необходимая информация.
Проблема как раз и возникла в клиентском обработчике события при клике на вершину дерева. В данном обработчике записывается необходимое значение в скрытое поле:
<asp:HiddenField ID="ID1" runat="server" />
и инициализируется срабатывание клике по скрытой скрытой кнопки:
<asp:Button ID="Button1" runat="server" style="display:none;" OnClick="ButtonSurvey_Click" />
сам js-скрипт выглядит так:
function clickTree(Target, Event) {
$("#ID1").val(Event.TreeNode.getValue());
$("#Button1").click();
}
При этом в Page_Load у данных двух компонентов установлено:С первой точки зрения, код вроде как верный и никаких угроз безопасности не несет, но вот при выполнении js-скрипта выдается сообщение "A potentially dangerous Request.Form value was detected from the client".
ID1.ClientIDMode = System.Web.UI.ClientIDMode.Static;
Button1.ClientIDMode = System.Web.UI.ClientIDMode.Static;
После долгих разбирательств, выяснилось, что сам компонент дерева генерирует скрытое поле (HiddenField) и в него пишет xml, и именно на это ругается ValidateRequest (подробное описание как это происходит можно почитать в MSDN)
После интенсивных поисков в просторах интернета, поняли что надо отключить данную проверку и добавили в заголовок страницы директиву ValidateRequest="false" и в web.config секцию:
<configuration> <system.web> <pages validateRequest="false" /> </system.web> </configuration>Но никакого этого результат не дало, и пришлось мучить поисковые машины еще. В итоге оказалось всего навсего в web.config не хватало строчки:<httpRuntime requestValidationMode="2.0"/>после добавления которой, валидация отключилась и все заработало.
Спасибо, ставлю плюс за помощь
ОтветитьУдалитьrequestValidationMode="2.0" !!!
ОтветитьУдалитьСпасибо, друг! Я то тут мучаюсь...
Не забываем ставить +1 (и совсем суппер, если твитните)
ОтветитьУдалить