关闭单个字段的输入验证

时间:2010-09-27 14:09:16

标签: asp.net validation webforms

我有一个ASP.NET 4网站,我想让人们放上'<'在他们的密码。但是,.NET通过阻止(它看到的)尝试将HTML放在表单字段中来阻碍。我知道我可以完全关闭输入验证,但我只想为这一个字段关闭它。有谁知道一个简单的方法吗?

5 个答案:

答案 0 :(得分:1)

这是可能的。只需在不应验证的属性上添加mobileno

请参阅ValidateInputAttribute does not contain a definition for Exclude

答案 1 :(得分:1)

现在可以使用.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 Unobtrusive Validation with jQuery

有关RequestValidationMode 4.5的更多信息:requestValidationMode 4.5 vs 2.0

答案 2 :(得分:0)

您可以使用ValidateInputAttribute关闭单个MVC操作的输入验证。由于您只接受用户名/密码(我认为),您应该能够自己擦除任何无效字符的输入。使用Microsoft Web Protection Library即可。

答案 3 :(得分:0)

您只能关闭整个页面的输入验证。我能想到的唯一解决方案是关闭输入验证,然后使用Anti-XSS等内容清除所有其他(非密码)输入字段。

答案 4 :(得分:0)

注意在ASP.NET 4及更高版本中,要使@Page指令中的ValidateRequest正常工作,您需要将<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的方法不同。