2012-06-06 111 views
7

是否可以在驗證摘要消息中放置HTML鏈接?例如,我想提出一個鏈接到另一個頁面,以防有驗證錯誤:驗證摘要消息中的鏈接

@Html.ValidationSummary(False, "read <a href=""anotherpage.html"">more</a>") 

@Html.ValidationSummary(False, "read " & 
    Html.ActionLink("more", "helpforerror").ToHtmlString) 

但在瀏覽器中的標籤被轉義,因此不會形成一個鏈接。

回答

3

最後我選擇了另一種方式來做到這一點:創建一個包含鏈接等一個div 。驗證摘要之外,並添加只有的ModelState是無效的DIV:

@If Not ViewData.ModelState.IsValid Then 
    @<div>read <a href="anotherpage.html">more</a></div> 
End If 

這是由an answer to similar question啓發。

0

可以檢查的形式是有效的jQuery和更新的div與鏈接文本:

<div id="divToUpdate"> 

</div> 

$('form').submit(function(){ 
    if(!this.valid()) 
     $('#divToUpdate').html("read <a href='anotherpage.html'>more</a>"); 
}); 
6

我知道你已經接受了一個答案,但我認爲我的解決方案更簡單,如果你想添加鏈接到現有的驗證摘要,將需要更少的重寫。

您需要在類似如下的驗證消息中輸入{0}類型format item,這將被您的鏈接取代。

ModelState.AddModelError("", "Some error message with a link here {0}."); 

那麼在你看來打電話給你驗證摘要如下所示:

@string.Format(Html.ValidationSummary().ToString(), Html.ActionLink("Click Here", "Action_To_Link_To")).ToHtmlString() 

在這種情況下,我已經用我添加到字符串對象.ToHtmlString(),基本上只是字符串轉換爲HtmlString擴展方法防止任何標記被轉義。它看起來像這樣:

public static HtmlString ToHtmlString(this String str) 
{ 
    return new HtmlString(str); 
} 
+0

真的很好的解決方案,本!我最終測試了Html.ValidationSummary()== null是否首先在輸出上使用了'Html.Raw()',但它工作得很好。謝謝! –

+0

這很聰明:) –

2

驗證文本的ValidationSumary或​​ValidationFor等編碼之前...

你只需要塗解碼HTML,然後創建一個MvcHtmlString ...

例:

@HttpUtility.HtmlDecode(Html.ValidationSummary().ToString()).ToMvcHtmlString() 

這是一個擴展我已經取得了令MvcHtmlString:

namespace System 
{ 
    public static class StringExtension 
    { 
     public static System.Web.Mvc.MvcHtmlString ToMvcHtmlString(this string value) 
     { 
     return System.Web.Mvc.MvcHtmlString.Create(value); 
     } 
    } 
} 

,或者如果你打算重用這個你可以創建一個的HtmlHelper:

namespace System.Web.Mvc.Html 
{ 
    public static class FormHelper 
    { 
     public static MvcHtmlString ValidationSummaryEx(this HtmlHelper htmlHelper, bool excludePropertyErrors) 
     { 
      var original = htmlHelper.ValidationSummary(excludePropertyErrors); 
      var decoded = HttpUtility.HtmlDecode(original.ToString()); 
      return decoded.ToMvcHtmlString(); 
     } 
    } 
} 

希望它可以幫助您或未來的觀衆。 注意:它適用於所有驗證Summary and ValidationFor ...

0

如果你在ModelStateError發回HTML,你可以用這一個班輪:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToHtmlString())) 

這是非常相似的@Benoit曾建議什麼,只是無需擴展。