2015-04-06 89 views
0

我对寄存器模式远程验证限制为编辑控制器的方法

我的模型类

public class RegisterViewModel 
{ 


    [Required] 
    [StringLength(100, ErrorMessage = "Please enter a minimum of {2} characters", MinimumLength = 6)] 
    [DisplayName("University ID")] 
    [Remote("doesusernameExist", "HEC",null, ErrorMessage = "usr name is allready exist", HttpMethod = "POST")] 
    public string usrname { get; set; } } 

的json控制器类

[HttpPost] 
    public JsonResult doesusernameExist(string usrname) 
    { 

     var institute = db.Institutes.Find(HEI_ID); 
        return Json(institute == null); 


    } 

的创建我是新用户和编辑用户使用以上模型。所以没有创造另一种模式,我想禁用的编辑方法doesusernameExist调用方法

+1

您也需要2个视图模型(最佳的解决方案),或者需要一个额外的值传递给'doesusernameExist()'使用方法(表示ID属性)的'AdditionalFields' p “RemoteAttribute”属性,以便您可以使用它来有条件地测试是否需要执行数据库检查(即,如果ID为null或为零,则为新对象,所以'返回Json(true);'或任何您想要应用的逻辑) – 2015-04-06 12:23:39

回答

1

先在编辑视图禁用客户端验证username:在编辑帖子行动

@Html.TextBoxFor(m => m.username, new { @data_val = "false" }) 

其次从ModelState删除验证结果为username

public ActionResult EditUser([Bind(Exclude = "usrname")]RegisterViewModel model) 
{ 
    ModelState.Remove("username"); 
    if (ModelState.IsValid) 
    { 
    . 
    . 
    . 
+0

非常感谢您的答案,它确切的位置 – Chathz 2015-04-07 04:24:52

+0

这将删除所有验证,包括'[Required ]'和'[StringLength]'验证! – 2015-04-07 23:27:02

+1

当然,它会删除所有验证,但在“编辑用户操作”中,不需要检查用户名,因为它已经存在,用户不能更改他/她的用户名。很明显,不是吗? – 2015-04-08 04:36:03