如何有条件地禁用某些字段的客户端验证?
以下是我需要做的例子:
它不起作用,因为:当用户点击第二个(确认屏幕)上的重新发送按钮时,客户端验证将不会通过。它会说即使没有字段也需要电子邮件。如何在确认页面发送给用户之前禁用javascript验证电子邮件?
示例ASP.NET MVC页面
<%if (Model.Confirm == false){ %>
<% using (Html.BeginForm()) { %>
Your email: <%: Html.EditorFor(m => m.Email) %>
Your name: <%: Html.EditorFor(m => m.Name) %>
<input type="submit" value="Send Email" />
<% } %>
<%} else{ %>
The e-mail was send! You can write your name and click button to resend it.
<% using (Html.BeginForm()) { %>
Your name: <%: Html.EditorFor(m => m.Name) %>
<input type="submit" value="Resend me email again" />
<% } %>
<% } %>
在模型中,Email
和Name
都是必填字段,以强制执行客户端验证。
控制器动作示例
public ActionResult Index(){
return new MyModel {Confirm = false;}
}
[HttpPost]
public ActionResult Index(MyModel model){
if(DataHelper.isKnown(model.Name)){
//send e-mail to the address corresponding to name in database
}
if(!ModelState.IsValid) {
return View(model);
}
//Send e-mail to address in email
//store pair name->email to database
model.Confirm = true;
return View(model);
}
答案 0 :(得分:2)
只是一个简单的解决方案,我将隐藏第二次确认的电子邮件字段并保留其值。
<%} else{ %>
The e-mail was send! You can write your name and click button to resend it.
<% using (Html.BeginForm()) { %>
<%: Html.HiddenFor(m => m.Email) %>
Your name: <%: Html.EditorFor(m => m.Name) %>
<input type="submit" value="Resend me email again" />
<% } %>
<% } %>
答案 1 :(得分:1)
我认为,这里既没有也没有问题。因此,您需要禁用该视图的客户端验证,并手动检查要验证的控件。 (脱离我的头顶)。
编辑:如果我想进行手动客户端验证,我会使用jQuery,因为它在这些任务中非常直接。
答案 2 :(得分:1)
为什么不使用2种不同的观点?您不必重定向。我认为你在这里违反了SRP。这种观点不仅仅是为了一个目的。
public ActionResult SubmitEmail(Model model)
{
if(!emailWasSent)
return View("FirstView");
else
return View("ConfirmationView");
}
这样第一个视图可以进行客户端验证,第二个视图不能选择加入并按照自己的意愿进行。
答案 3 :(得分:1)
当“禁用”属性添加到元素时,可以将其从客户端验证中排除。
Disabling Client Side Validation For Disabled Input Controls In ASP.NET MVC - Imran Baloch's Blog