2016-08-10 44 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); 
     } 
    } 
相關問題