我有一个ASP.NET 4网站,我想让人们放上'<'在他们的密码。但是,.NET通过阻止(它看到的)尝试将HTML放在表单字段中来阻碍。我知道我可以完全关闭输入验证,但我只想为这一个字段关闭它。有谁知道一个简单的方法吗?
答案 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("<", "<").Replace(">", ">").Replace("&", "&");
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, '&').replace(/</g, '<').replace(/>/g, '>'); } catch (err) {}");
}
}
}
然后在web.config中注册控件:
<system.web>
<pages>
<controls>
<add tagPrefix="uc1" namespace="Controls" />
</controls>
</pages>
</system.web>
这样你就可以使用<uc1:HtmlTextBox runat="server" />
如果你想允许文本框发布html,但页面上的其他控件仍然会被阻止发布html,这与关闭ValidateRequest的方法不同。