2012-04-27 76 views
1

所以我有一个多步骤的过程,允许用户检索一个被遗忘的密码。这些步骤是像这样,用在我的控制每一步不同的动作:手动验证文本框与jQuery不显眼的验证asp.net MVC3

  1. 输入用户名和电子邮件
  2. 输入密码提示问题的答案
  3. 电子邮件如果一切顺利
  4. 恢复链接到用户

我尝试使用一种型号的一切:

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种不同的视图模式,让框架为我做这项工作。

回答

2

如果您先验证用户名和密码,然后再输入密码,我认为最简单的解决方案是有两个独立的视图模型。然后,您仍然可以使用适当的View Model和每个部分的验证。

+0

这是我的第一个想法,但是对于只有一个参数的视图模型来说似乎有点荒谬。但同时也许并不像通过循环来验证工作那样荒谬...... – ryanulit 2012-04-27 15:34:01

+0

通过将自动生成的属性插入到输入中,可以使用jquery进行手动验证。但是,如果您的视图模型只有一个输入,那么我认为仅使用一个输入创建视图模型是完全合理的。特别是当替代方案涉及更多的工作,硬编码以及并不真正属于一起的输入时。 – DMulligan 2012-04-27 15:38:38

+0

2个视图模型现在对我最有意义。谢谢你的帮助。 +1 – ryanulit 2012-04-27 15:53:24