2010-09-03 23 views
0

好的 - 此刻,我正在MVC2 C#項目中使用我的模型中的[必需]來驗證我的頁面。ASP.NET MVC2中的表單驗證消息 - 使用圖像而不是文本顯示錯誤消息

對於例如在我的模型,我有:

[DisplayName("Username")] 
[Required(ErrorMessage = "Please enter a Username")] 
public string UserName { get; set; } 

......在我看來,我有

<%=Html.ValidationMessageFor(x => x.UserName, "*")%> 

但隨後這是不符合的造型和錯誤的其餘部分保持一致我們網站的其餘部分是用傳統ASP編寫的。

我希望能夠在下面的圖像中重新創建可能的驗證樣式。

所以在加載頁面(不提交),我們可能會看到類似這樣的顯示屏,顯示M圖標的alt和title「請輸入用戶名」:

Mandatory Fields

然後如果我們試着和遺漏值提交 - 我們看到

Error Messages

再次盤旋在紅色的X會顯示錯誤消息。

是否有實現驗證這種樣式的一種簡單的方法,如果是什麼去它的最好方式......

謝謝你的任何有用的提示,提示,建議:

+0

這是完全未經測試(因此評論),但你有沒有試圖把''​​中的標籤字符串變量? (確保當然不是HtmlEncode那些字符串) – 2010-09-03 13:39:52

+1

我試過這種搖滾 - 不起作用......不僅如此,我還希望在您提交頁面之前顯示必填字段。 – beebul 2010-09-03 13:48:55

回答

1

你應該可以通過創建自己的HtmlHelper擴展方法來實現這一點。

E.g.

public static string ValidationImage(this HtmlHelper htmlHelper, string modelName) 
{ 
    if (modelName == null) 
    { 
     throw new ArgumentNullException("modelName"); 
    } 

    if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName)) 
    { 
     return null; 
    } 

    ModelState modelState = htmlHelper.ViewData.ModelState[modelName]; 
    ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors; 
    ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0]; 

    if (modelError == null) 
    { 
     return null; 
    } 

    string messageText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState); 

    TagBuilder builder = new TagBuilder("img"); 
    builder.MergeAttribute("src", "urlToYourCrossImage"); 
    builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName); //Or your own custom class for the img tag here 
    builder.MergeAttribute("alt", messageText); 
    builder.MergeAttribute("title", messageText); 

    return builder.ToString(TagRenderMode.SelfClosing); 
} 

看看ASP.NET MVC ValidationExtensions source code來得到關於如何爲它寫一些重載的一些想法。

HTHS,
查爾斯

+0

您好Charlino,這是一個很好的答案,應該解決問題的一部分 - 但提到的部分是什麼我想要顯示強制性的領域之前表單提交與藍色M ...有沒有辦法從[在模型中需要]字段...只是想知道最好的方法。非常感謝您的回答。 – beebul 2010-09-07 13:12:53

+0

感謝Charlino - 我已經設法根據你的建議得到這個工作... – beebul 2010-09-21 09:49:00