2017-05-10 26 views
1

我的程序有可以創建項目(其行爲與文件夾類似)的用戶以及用戶可以添加文檔的項目中。 用戶可以與其他用戶共享項目。來自ModelState.AddModelError()的錯誤消息不會出現

我已經阻止了一個用戶可以在同一個項目中兩次添加同一個人,但我似乎無法顯示我想要的錯誤消息。

該電子郵件具有必需的屬性,並顯示這些錯誤消息(如果該消息無效且該消息框爲空)。

我沒有使用ModelState.AddErrorMessage()對嗎?

這是變量是如何在Model

[EmailAddress(ErrorMessage ="Please enter a valid email address!")] 
    [Display(Name = "Email")] 
    [Required(ErrorMessage = "You must enter an email!")] 
    public string email { get; set; } 

這是我的控制器的一部分

//Prevent double share 
List<ProjectModel> userProjects = projectService.getAllProjects(user.email); 
    foreach(var proj in userProjects) 
    { 
     if(proj.name == userService.getProjectByID(urlInt).name) 
     { 
      //This is the error message I am trying to display 
      ModelState.AddModelError(user.email, "This user already has access to this project!"); 
      return View(user); 
     } 
    } 
userService.share(user.email, urlInt); 
return RedirectToAction("../Dashboard/Dashboard"); 

這是我的看法

@using (Html.BeginForm("Share", "User", FormMethod.Post, new { @class = "add-document-form" })) 
{ 
    <div class="add-document-div"> 
     <div class="form-group"> 
      <label for="email" class="control-label">Email address</label> 
      <br /> 
      @Html.TextBoxFor(m => m.email, new { @class = "form-conrtol" }) 
      <br /> 

      <!--Here is the validation for the email button--> 
      @Html.ValidationMessageFor(m => m.email, "", new { @class = "text-danger" }) 
     </div> 
    </div> 
    <input type="submit" class="btn btn-fab" value="Send invitation" /> 
} 

回答

1

ModelState.AddModelError的重載你使用兩個參數; 名稱的模型屬性添加錯誤以及實際錯誤。您需要確保第一個參數是正確的名稱。在這種情況下,我假設"email"

目前,您正在提供user.email包含的內容,而不是字段名稱。

+0

非常感謝您的快速響應! 我將'user.email'改爲''email''這是變量的名字,但是這個消息仍然沒有顯示。 任何想法爲什麼? –

+0

''''空字符串會被AddModelError –

+0

覆蓋嗯......它似乎不起作用,也許它不會覆蓋模型中給出的驗證。也許我需要考慮另一種方法。 感謝您的建議! –

0

這是

ModelState.AddErrorModel("<some form field name>", "<your error message>"); 

語法中的第一個參數是表單字段的名稱,以便MVC知道在何處結合的錯誤消息。

ModelState.AddModelError(user.email, "This user already has access to this project!"); 

試圖將錯誤消息綁定到user.email的任何值。這在您的表單中不存在。

0

要通過控制器添加錯誤的,你只需要以字符串格式提供密鑰名稱服務器端驗證..所以你的情況,這應該工作:

ModelState.AddErrorModel("email", "This user already has access to this project!"); 
return View(user); 

讓我知道,如果這有助於!

+0

謝謝你的迴應!我將'user.email'改爲''email''這是變量的名字,但是這個消息仍然沒有顯示。任何想法爲什麼? –

+0

你的表單中是否有這樣的行:'@ Html.ValidationSummary(true,「」,new {@class =「text-danger」})'? –

0

原來我只是需要更改user.email"email"就像已經指出。

當時爲什麼我沒有工作的原因是因爲另一個人正在清理我們的ServiceBase並打斷了我與數據庫的連接,所以我的表單根本沒有發佈。

我修復了錯誤信息後顯示。

感謝您的幫助!

相關問題