在mvc4中将客户端验证发送到服务器之前进行验证

时间:2013-08-28 03:39:26

标签: asp.net-mvc login

我有一个用于向服务器发送登录信息的模型,为简单起见,将其视为

public class NewUser
{  
   public string Name{get;set;}
   public string UserName {get;set;}
   public string Password {get;set;}
}

我还有一个控制器接受NewUser作为Post Parameter,然后将其保存到DB,这部分很好......

在我的观点中,我希望有一个客户端检查以验证密码是否已插入两次匹配(您知道重新输入的密码字段)

在我的Razor视图中我

@using(Begin.RenderForm(actioncontroller))
{
//maps the fields to the model
then I should have something as
@Html.TextBox("tbPass2")
[...]
<input type="submit" value="insert"/>
}

如何在没有第二个密码字段的情况下执行此检查并在服务器上进行匹配?

由于

2 个答案:

答案 0 :(得分:0)

你可以通过两种方式实现它

  1. 使用表单集合

    public ActionResult ActionName(FormCollection collection_)
    {
    string pass2 = collection_["tbPass2"].ToString();
    }
    
  2. 2直接接收参数

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult AddNewLink(string tbPass2)
    {
    }
    

    要使上述工作正常,请确保您的控件具有相同的名称

    对于上述情况,它应该是@Html.TextBox("tbPass2")

答案 1 :(得分:0)

要比较模型的两个属性,有一个Compare验证属性。

  

模型

public class NewUser
{  
   public string Name{get;set;}
   public string UserName {get;set;}

   [Required]
   public string Password {get;set;}

   [Compare("Password")]
   public string ConfirmPassword { get; set; }
}
  

查看

@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.Password)
    @Html.PasswordFor(m => m.Password)
    @Html.ValidationMessageFor(m => m.Password)

    @Html.LabelFor(m => m.ConfirmPassword)
    @Html.PasswordFor(m => m.ConfirmPassword)
    @Html.ValidationMessageFor(m => m.ConfirmPassword)

    <input type="submit" value="insert" />
}
  

控制器

[HttpPost]
public ActionResult Login(NewUser model)
{
    if (ModelState.IsValid)
    {
        // validation successful
        return RedirectToAction("Index"); // or any other logic
    }
    return View(model);
}
  

的Web.config

<configuration>
  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
</configuration>

要执行客户端验证,请确保您的页面中包含以下脚本: jquery-{version}.jsjquery.validate.jsjquery.validate.unobtrusive.js。脚本的顺序应该保持不变。