所以我有一个多步骤的过程,允许用户检索一个被遗忘的密码。这些步骤是像这样,用在我的控制每一步不同的动作:手动验证文本框与jQuery不显眼的验证asp.net MVC3
- 输入用户名和电子邮件
- 输入密码提示问题的答案
- 电子邮件如果一切顺利 恢复链接到用户
我尝试使用一种型号的一切:
public class AccountForgotPassword
{
[Required()]
[DisplayName("Username")]
public string UserName { get; set; }
[Required()]
public string Email { get; set; }
[Required()]
public string PasswordAnswer { get; set; }
}
但是当我检查的ModelState .IsValid的第一个动作,因为用户不能输入他们的密码回答问题,它将永远是错误的,并使一些有趣的代码来检查模型状态实际上是有效的,但只是缺少密码答案,因为我不知道用户是谁。
为了解决这个问题,我决定放弃一个类型化的模型,并在我的动作中使用字符串参数。现在唯一的问题是,我不能再使用模型绑定获得的简单验证布线。
这样说,有没有人知道一个简单的方法来手动连接jQuery验证个人输入,所以它会检查所需的规则?此外,这种接线是否允许我使用验证器生成的默认错误消息,还是必须在接线时自行提供?难道这么容易,我认为:
@{
ViewBag.Title = "Forgot Password";
}
<h2>
Forgot Password</h2>
@using (Html.BeginForm())
{
<p>
@Html.Label("UserName", "Username")
@Html.TextBox("UserName")
@Html.ValidationMessage("UserName")
</p>
<p>
@Html.Label("Email", "Email")
@Html.TextBox("Email")
@Html.ValidationMessage("Email")
</p>
<p>
<input type="submit" value="Send Form" />
</p>
}
<script type="text/javascript">
$.validator.unobtrusive.addRule(..something here...);
</script>
此外,如果有更好的方式来做到这一点,请让我知道。提前致谢。
UPDATE
对于其他任何人发现这一点,我没弄清楚如何手动添加规则。应该先阅读验证文档。假设上面的查看HTML,脚本是:
<script type="text/javascript">
$(function() {
$('#UserName').rules('add', {
required: true,
messages: {
required: 'The username field is required.'
}
});
$('#Email').rules('add', {
required: true,
messages: {
required: 'The email field is required.'
}
});
$.validator.unobtrusvie.parse('form');
});
</script>
然而,想着它多一些,并采取AFinkelstein的答案进去后,我想我会先走一步,让2种不同的视图模式,让框架为我做这项工作。
这是我的第一个想法,但是对于只有一个参数的视图模型来说似乎有点荒谬。但同时也许并不像通过循环来验证工作那样荒谬...... – ryanulit 2012-04-27 15:34:01
通过将自动生成的属性插入到输入中,可以使用jquery进行手动验证。但是,如果您的视图模型只有一个输入,那么我认为仅使用一个输入创建视图模型是完全合理的。特别是当替代方案涉及更多的工作,硬编码以及并不真正属于一起的输入时。 – DMulligan 2012-04-27 15:38:38
2个视图模型现在对我最有意义。谢谢你的帮助。 +1 – ryanulit 2012-04-27 15:53:24