我有一个关于 mvc3 验证的问题。内置的验证看起来很棒。然而,在一种情况下,我不得不使用 javascript,导致它的外观和感觉不一致(警报窗口与漂亮的红色文本)。我们有一个表单,其中包含一些供用户输入的字段。提交后,一些 ajax 代码会触发一个链接,该链接映射到一个控制器方法,该方法获取从表单提交的值并启动导致创建客户端数据库的进程。
问题是:由于没有模型直接映射到该表单上的字段,因此对字段(长度、字符等)进行验证的最佳方法是什么?
我的解决方案是编写一些 javascript 函数,但是有没有更干净的方法来做到这一点?
<td>@Html.TextBox("NewClientId")</td>
...
<script language="javascript">
function ValidateFieldLength(min, max, element) {
var len = element.value.length;
if (len < min || len > max)
return false;
else {
return true;
}
}
function createNewClient() {
if (!ValidateFieldLength(3,3,document.getElementById('NewClientId'))) {
alert("Invalid Client ID length");
return;
}
$.ajax({
url: '/api/Clients',
type: 'PUT',
data: JSON.stringify({
ClientId: $('#NewClientId').val(),
Name: $('#NewClientName').val()
}),
contentType: 'application/json; charset=utf-8',
success: function (reponse) {
//alert(reponse.data.model.Id);
alert("Database created");
},
error: function (err) {
alert(err);
}
});
}
我会看到的另一个选项是添加验证数据属性手动添加到 html 元素。通过这种方式,您可以避免在服务器端和客户端重复错误消息和其他属性。
For ex.
@Html.TextBox("NoOfJoinees", "", new
{
size = 5,
data_val_required="No. of joinees is required",
data_val_number = "The field No. of joinees must be a number.",
data_val_range = "No. of joinees should be minimum 2 and not more than 10",
data_val_range_max="10",
data_val_range_min="2"
})
在上面的文本框中,我添加了三种类型的验证:required, type and range通过添加数据属性就可以轻松实现。这不显眼的验证库微软将负责剩下的事情。
您应该从一个地方读取错误消息和其他常量。因此,当您在服务器端进行验证时,不需要复制它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)