2010-03-21 48 views
4

剛剛開始使用ASP.Net MVC,並且遇到了一些關於驗證消息的障礙。 我有一個自定義驗證屬性分配給我的類驗證我的模型上的幾個屬性。ASP.NET MVC - 將XHTML添加到驗證錯誤消息

當此驗證失敗時,我們希望錯誤消息包含XHTML標記,包括鏈接到幫助頁面(這是在原始WebForms項目中作爲ASP:Panel完成的)。

目前,ErrorMessage中的XHTML標記(例如「< a>」)正在呈現給屏幕。有沒有什麼辦法讓ValidationSummary正確渲染XHTML標記?還是有更好的方式來處理這種驗證?

感謝

回答

-1

好的,感謝tvanfosson提供關於查看源代碼的建議。

我基本上推出了我自己的「Html.ValidationSummaryXHTML」幫手,它沒有HtmlEncode在ModelState中的任何錯誤消息,只是推遲到「InnerHtml」。

作品一種享受!

+3

Usu。你想評論你的問題或編輯它,而不是添加答案。此外,系統的工作方式是,您可以提供有用的答案(一旦您獲得15個代表)並接受(使用選中標記)最能解決您問題的答案。所有這些都在FAQ中(請參閱頁面頂部的鏈接)。你可以接受你自己的答案,如果它是最好的,但你必須等待幾天。歡迎來到這個網站。 – tvanfosson 2010-03-21 14:06:43

2

我敢肯定的是,默認的驗證消息助手HTML編碼,你可能在你的屬性的任何消息。我的建議是使用CodePlex上提供的source code作爲編寫您自己的HtmlHelper擴展的起點,該擴展不會對錯誤字符串進行HTML編碼。您想要在System.Web.Mvc.Html命名空間中查找ValidationExtensions.cs文件。

+0

最終它使用下面的方法,我認爲: 公共無效SetInnerText(串的innerText) { this.InnerHtml = HttpUtility.HtmlEncode(innerText); } 但是,因爲我使用ValidationSummary來顯示消息,我猜這意味着我不能將它用於包含XHTML的消息。 我想我可以推出我自己的ValidationSummary,使用System.Web.Mvc.Html命名空間中的源代碼但刪除編碼調用? – Neil 2010-03-21 13:28:20

7

這是一個使用HtmlDecode()來反轉編碼的短期修復程序。適用於我。

(不能打擾重建整個驗證對象模型)。

public static class ValidationExtensions 
{ 
    public static MvcHtmlString ValidationMessageHtmlFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper, 
    Expression<Func<TModel, TProperty>> expression) 
    { 
    return new MvcHtmlString(
     HttpUtility.HtmlDecode(
     htmlHelper.ValidationMessageFor<TModel, TProperty>(
     expression, 
     null, 
     ((IDictionary<string, object>)new RouteValueDictionary())) 
     .ToHtmlString())); 
    } 
} 
+0

謝謝,效果很好。對於使用此答案的其他人:不要忘記包含使用System.Web.Mvc.Html;在您的文件的頂部或它不會找到htmlHelper。 – Arnoud 2011-06-30 14:10:19

+0

這是最完美的答案!非常感謝! – 2012-02-23 10:58:13

2

我最終只是走在ValidationSummary輸出,只是HtmlDecode它。

與HTML中的ModelState錯誤效果很好,我不必製作自己的ValidationSummary。

public static MvcHtmlString ValidationSummaryNoEncode(this HtmlHelper htmlHelper) 
{ 
    string validationSummaryOutput = htmlHelper.ValidationSummary().ToHtmlString(); 

    string decodedValidationSummaryOutput = HttpUtility.HtmlDecode(validationSummaryOutput); 

    return MvcHtmlString.Create(decodedValidationSummaryOutput); 
} 
0

您還可以使用Html.RawHttpUtility.HtmlDecode helper方法在呈現視圖包含HTML標記驗證的消息。這裏有一個簡單的例子:

型號:

[Required(ErrorMessage = "This message contains <b>HTML markup</b> code.")] 
public string MyProperty{ get; set; } 

查看:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(x => x.MyProperty).ToHtmlString())) 
相關問題