2016-08-10 43 views
2

ASP.Net MVC 5ViewView中的控件/输入尝试在数据库中创建列值(或class中的字段值)时,弹出自动错误消息,该值应该是唯一的,但我们违反了它 - 如使用现有电子邮件创建新用户帐户的电子邮件,如下所示。现在如何在ASP.Net MVC 5中更改默认的“[field value] already taken”错误信息?

enter image description here

,我应该改变上述错误消息成当地语言在我的项目:

... is already taken <-> ... [is already taken in local language] 

如何改变“[字段值]已经采取”(自动)错误信息?

根据这个帖子:

Issue with username validation message in asp.net identity

我们只能尝试在整体解决方案,以寻找“名称{0}已被使用”,但是当我这样做,我找不到它。

enter image description here

是,在早期MVC但对于陈旧一个MVC 5有效的解决方案?

(注:不幸的是,文章没有指出哪些ASP.Net MVC版本的OP正在与)

+0

你尝试用'DataAnnotations'? –

+0

@SunilKumar没有。想知道如何举个例子吗?最后,我没有那么普遍的解决方案,只是在将错误消息抛出到View之前进行修改。它可以工作,但对于更多的错误消息绝对不是一个好主意。 :/如果你知道更好的解决方案,将很感激。 – Ian

+0

您是使用'Asp.Net Identity'还是'MembershipProvider'? – trailmax

回答

-1

在模型类尝试通过您的属性之前添加以下行数据annotiations做到这一点:

[Required(ErrorMessage = "is already taken in local language")] 

如果可以的话,可以使用语言包安装.NET Framework。然后你会以本地语言显示所有的错误信息。

+0

我已经完成了它,但是这会更改“字段是必需的”错误消息,而不是“已采用”错误消息。有两个不同的错误信息在这里:“是必需的”和“已经采取” – Ian

1

我已经在System.ComponentModel.DataAnnotations中使用Remote执行了此操作。请参考下面的代码:

ViewModelProperties):

 [Display(Name = "Email")] 
     [Remote("IsValidUserName", "Remote", AdditionalFields = "Email", HttpMethod = "Post")] 
     public string Email { get; set; } 

这里的 “远程” 是Controller名称和 “IsValidUserName” 我们Method。如下图所示:

public class RemoteController : Controller 
    { 
     [AcceptVerbs(HttpVerbs.Post)] 
     public JsonResult IsValidUserName() 
     { 
      string email= Request.Form["Email"]; 
      string message = "Email '"+ email+ "' is already taken"; 
      if (!string.IsNullOrEmpty(email)) 
      { 
       using (DbContext db = new DbContext()) 
       { 
        if (!db.tb_Users.Any(x => x.email== email)) 
        { 
         message = string.Empty; 
        } 
       } 
      } 
      if (message == string.Empty) 
       return Json(true, JsonRequestBehavior.AllowGet); 
      else 
       return Json(message, JsonRequestBehavior.AllowGet); 
     } 
} 

View页面,你必须使用这个象下面这样:

@Html.TextBoxFor(model => model.Email) 
@Html.ValidationMessageFor(model => model.Email) 

输出将是: enter image description here

要记住的要点: 您必须使用以下JavaScripts用于运行此:

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.15.1/jquery.validate.min.jss"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js"></script> 

希望它可以帮助你。

感谢。

+0

嗨苏尼尔,谢谢你给出的答案。我会看看。无论如何,你都得到了我的赞赏。 ;) – Ian

+0

谢谢lan .. :) –

0

一个快速有点哈克解决方案,这将是:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
      var result = UserRepo.CreateUser(model.Email, model.Password); 
      if (!result.Succeeded) 
      { 
       AddErrors(result); 
      } 
     } 
    } 



    private void AddErrors(IdentityResult result) 
    { 
     foreach (var error in result.Errors) 
     { 
      string errorMessage = error; 
      if (error.EndsWith("is already taken.")) 
       errorMessage = "Your error message"; 
      ModelState.AddModelError("", errorMessage); 
     } 
    } 
相关问题