我有一个不能接受非8位字符的数据库,如果用户在整个表单中添加了一个欧元符号,整个事情就会崩溃。
这是一个非常非常大的形式,我并不想在任何地方添加代码行来运行简单的替换功能 - 但我无法在线找到任何方法来搜索整个表格预先提交,这可能吗?
未能确定在我的网络表单中限制某些字符输入的最佳方法是什么?
使用大量jQuery运行ASP.NET MVC。
答案 0 :(得分:1)
真的没有足够的信息来尽可能地回答这个问题。但我会试一试。你不会在任何地方添加代码行。我假设您在提交之前汇总表单数据,此时您将剥离欧元符号。假设它是一个对象..
var formObj = {firstName : "aspiring€", lastName : "programmer€", comment : "I really like euro symbols!!€€€!!" }
$.each(formObj, function( key, value ) {
formObj[key] = formObj[key].replace(/€/g, '');
});
console.log(formObj);
答案 1 :(得分:0)
2种可能的选择
一个。您可以创建一个自定义模型绑定器,在绑定模型之前删除无效字符。 Refer this example用于自定义模型绑定器,用于从发布的值中删除空白。优点是您可以在global.asax.cs
中注册它,并且您的模型属性在回发后不会包含无效字符。缺点是,如果ModelState
无效并且您返回视图,则用户会看到修改后的文本,这可能会令人困惑(我输入的内容发生了什么?)
B中。创建一个继承自RegularExpressionAttribute
的属性并将其应用于所有相关属性
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class MyAttribute : RegularExpressionAttribute
{
public MyAttribute() : base(@"^[^\u20AC]+$")
{
// Add default error message
ErrorMessage = "The value cannot contain the euro symbol";
}
}
并在Global.asax.cs
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(MyAttribute), typeof(RegularExpressionAttributeAdapter));
优点是它提供了客户端和服务器验证。缺点是您需要记住将其添加到所有属性