![](/img/trans.png)
[英]ASP.Net MVC 3 ViewModel, unobtrusive JavaScript and custom validation
[英]How to use asp.net mvc 3 unobtrusive javascript validation with a wizard?
我正在使用asp.net mvc 3,并希望使用不引人注目的javascript 。 我正在设计一个很长的表格,如果不分解的话,可能会很不方便。
我决定使用jquery表单向导将其分解为一个看上去不应该让人觉得不知所措的向导。 我不奇怪我该如何在向导中使用数据注释和简洁的Java脚本。
现在,所有内容仍处于一种大形式,但看起来只是通过向导分解了。 表单末尾只有一个提交按钮,单击该按钮将序列化表单数据并使用该数据对服务器进行ajax发布。
从我通常第一次看到的使用mvc验证的情况来看,用户需要在任何客户端验证被触发之前单击“提交”按钮。 我想知道,一旦他们离开该字段,是否有可能这样做,因为一旦他们击中提交并且什么也没有发生,它将使用户感到困惑,然后他们不得不再次通过整个向导来查找验证错误。
最好在他们犯错时立即通知他们。
我知道使用带有验证功能的jquery表单插件的jquery向导,但我宁愿尝试尽可能使用一种方法来保持代码一致。
编辑
这就是我提交按钮上的内容
$('#frm').live('submit', function (event) {
event.preventDefault();
var $thisFrm = $(this);
ValidatorParse($thisFrm);//jQuery.validator.unobtrusive.parse(selector);
var clientCheck = $($thisFrm).validate().form();
if (clientCheck) {
// ajax post(server side validation will happen.If it does not pass serverside I send it back usually as json).
}
});
所以我看到了几个问题。 首先,只有在提交时才真正触发验证。 如果它被触发并且验证错误在第二个向导步骤中,则用户将看不到它(除非有人可以找到找到第一个错误的验证错误并将其切换到该步骤的方法)。
我看到的第二个问题是,他们必须等到最后,看看他们是否有验证错误。 我宁愿让他们尽快知道。
编辑
看来该向导使用了jquery validate,但由于某种原因它无法使用mvc jquery validate方式。
经过更多调查,我发现向导需要将“ required”视为要触发的类
// will trigger validation
<input type="text" value="" name="AnnualFee" id="AnnualFee"
data-val-required="Annual Fee Required"
data-val="true"
class="required ui-wizard-content ui-helper-reset ui-state-default error">
// will not trigger validation
<input type="text" value="" name="AnnualFee" id="AnnualFee"
data-val-required="Annual Fee Required"
data-val="true"
class="ui-wizard-content ui-helper-reset ui-state-default">
我没有在jquery的文档中看到使用类来验证表单来验证它们。 这是人组成的吗?
使用jquery表单向导时,您不需要在提交按钮上添加任何其他javascript代码(当然,它需要初始化)。
Microsoft MVC3的不引人注目的部分只是将html输入上标记的所有“ data- *”属性(例如data-val-required =“ blah blah blah”)转换为众所周知的jquery验证规则而进行的无聊工作。 这是在我们认为要验证表单之前完成的!
因此,您的模型上的RequiredValidationAttribute和朋友(您的自定义验证等)足以启动。
试试这个(如果您还没有的话):
您的提交和后退按钮必须为:
输入类别=“ navigation_button” id =“返回” type =“重置” value =“返回”
输入class =“ navigation_button” id =“下一步” type =“提交” value =“下一步”
初始化你的formwizard
$(document).ready(function () { $("form").formwizard({ formPluginEnabled: true, validationEnabled: true, focusFirstInput : true }); });
表单向导将负责为向导的每个步骤调用验证。
在写这篇文章之前,我以自己为例来证明它是可行的。
希望对您有所帮助,如果对您的问题有误,请对不起。
我和我的团队通常会创建向导,并在不依赖服务器端特定技术方法的情况下拥有独立的解决方案。 有些“向导”是结帐流程,您在单个页面上有许多结帐步骤。 我通过公司的高流量在100K +网站开发上完成了这些工作。
到目前为止,我们使用c#MVC,c#razor矩阵样式,node.js,php和python。 我们采用通用方法,可以在各种技术之间重复使用。 我们的方法非常类似于MVC,它非常严格地分隔HTML,CSS和JavaScript。
就像这样:
这样一来,您就可以完全分离出适用于任何技术的关注点。 在您的情况下,您可以更进一步,并在MVC中为每个步骤创建局部视图,并将它们分隔开来,因为它们可以为各自的步骤加载自己的CSS和JavaScript。
在我的个人资料中,您可以在结帐中看到使用此方法的网站。
我实际上并不认为这是一个完整的答案,因此需要更多反馈以充实您的意见。
我这样用
function ValidateStep(){
var validator = $("form").validate(); // obtain validator
var anyError = false;
if (!validator.element(this)) { // validate every input element inside this step
anyError = true;
}
if(anyError) return false;
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.