2013-05-15 89 views
1

我正在使用標準MVC成員身份驗證的變體。在ValidationMessageFor Block中顯示服務器端驗證消息

考慮到我的模型有:

[Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

而且該視圖有:

<div class="form-field"> 
    @Html.EditorFor(m => m.UserName) 
    @Html.ValidationMessageFor(m => m.UserName) 
</div> 

如果我標籤關閉用戶名字段,驗證消息正確地顯示「用戶名稱字段需要。」。

我需要的是,如果用戶輸入的用戶名未能在ActionResult中進行進一步驗證以提交,我想顯示一個自定義驗證消息。

一個例子可能是用戶輸入了一個已經登錄到系統中的用戶名(只在提交時進行檢查),所以ValidationMessage應顯示「用戶已通過工作站xyz登錄」等內容。

我想在Razor MVC 4中使用CustomValidationAttribute的一個很好的例子是最好的,因爲我相信這是它可以工作的唯一方式。唯一的問題是,這似乎是客戶端驗證。在我的情況下,我只想要服務器端。

回答

2

有點進一步的搜索表明我正在吠叫錯誤的樹。對於自定義服務器端驗證消息,只需執行以下操作:

if (result.AlreadyLoggedIn) 
{ 
    ModelState.AddModelError("UserName", String.Format("User already logged in via workstation {0}", result.WorkstationName)); 
} 
+0

該消息是否與ValidationMessageFor的內容出現在相同的位置?這與我的願望完全相同,但它對我無效。 – Dan