Отключить проверку ввода для одного поля - PullRequest
5 голосов
/ 27 сентября 2010

У меня есть сайт ASP.NET 4, на котором я хочу, чтобы люди могли добавлять «<» в свой пароль.Однако .NET мешает, блокируя (как это выглядит) попытку поместить HTML в поле формы.Я знаю, что могу полностью отключить проверку ввода, но я хочу отключить только это поле.Кто-нибудь знает простой способ сделать это? </p>

Ответы [ 5 ]

1 голос
/ 05 февраля 2018

Теперь это возможно с .NET 4.5.

Обновите свой Web.config:

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />

Затем установите ValidateRequestMode="Disabled" в элементах управления паролем:

<asp:YourControl id="YourControl" runat="server" ValidateRequestMode="Disabled"/>

Примечание - после обновления web.config вы можетестолкнуться с ошибкой WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. См. Ненавязчивая проверка ASP.Net 2012 с jQuery для получения дополнительной информации об этом.

Дополнительная информация о RequestValidationMode 4.5: requestValidationMode 4.5 vs 2.0

1 голос
/ 21 декабря 2017

Это возможно. Просто добавьте [AllowHtml] к свойству, которое не должно проверяться.

см. ValidateInputAttribute не содержит определения для исключения

0 голосов
/ 28 сентября 2010

Вы можете отключить проверку ввода только для всей страницы. Единственное решение, которое я могу придумать, - отключить проверку ввода, а затем очистить все остальные (не пароли) поля ввода, используя что-то вроде Anti-XSS .

0 голосов
/ 13 апреля 2012

Обратите внимание, что в ASP.NET 4 и выше для получения ValidateRequest в директиве @Page необходимо добавить <httpRuntime requestValidationMode="2.0" /> в web.config. Смотрите эту страницу для деталей: http://www.asp.net/whitepapers/aspnet4/breaking-changes

Но это мой предпочтительный подход:

namespace Controls
{
    public class HtmlTextBox : TextBox
    {
        protected override bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
        {
            bool res = base.LoadPostData(postDataKey, postCollection);
            Text = Text.Replace("&lt;", "<").Replace("&gt;", ">").Replace("&amp;", "&");
            return res;
        }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

            ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "htmlTextBox" + UniqueID, "try { var item = document.getElementsByName('" + UniqueID + "')[0]; item.value = item.value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'); } catch (err) {}");
        }
    }
}

И затем зарегистрируйте элемент управления в web.config:

<system.web>
  <pages>
    <controls>
      <add tagPrefix="uc1" namespace="Controls" />
    </controls>
  </pages>
</system.web>

Таким образом, вы можете просто использовать <uc1:HtmlTextBox runat="server" />, если вы хотите разрешить текстовому полю публиковать html, но другие элементы управления на странице будут по-прежнему заблокированы для публикации html в отличие от способа отключения ValidateRequest.

0 голосов
/ 27 сентября 2010

Вы можете отключить проверку ввода для одного действия MVC, используя ValidateInputAttribute .Поскольку вы принимаете только имя пользователя / пароль (я бы предположил), вы должны быть в состоянии очистить введенные данные от любых недопустимых символов.Для этого используйте Microsoft Web Protection Library .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...