2012-06-06 15 views
7

Doğrulama özeti mesajına bir HTML bağlantısı koymak mümkün mü? Mesela ben durumda başka bir sayfaya link koymak istiyorum doğrulama hatası vardır:Link in validation Özet mesajı

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

veya

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

Ama bir bağlantı oluşturmadığı böylece tarayıcıda etiketi kaçan edilir

.

cevap

3

Sonunda bunu yapmak için başka bir yol seçti . doğrulama özetinin dışında ve ModelState geçerli değil yalnızca div ekleyin: Bu an answer to similar question esinlenerek

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

.

0

formu bağlantı metni ile jQuery ve güncelleme div geçerli olup olmadığını kontrol edebilirsiniz: linki vb içeren bir div oluşturun:

<div id="divToUpdate"> 

</div> 

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

Bir cevabı kabul ettiğinizi biliyorum, ancak mevcut doğrulama özetlerine bağlantılar eklemek istiyorsanız, çözümümün daha basit olduğunu ve daha az yeniden yazmayı gerektireceğini düşünüyorum.

Aşağıdaki gibi doğrulama iletinize bir {0} tip 10 kodunu eklemeniz gerekir; bu, sizin bağlantınız ile değiştirilecektir.

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

ardından görünümünde şöyle doğrulama özetini çağırır: Bu durumda

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

i kullandım Temelde sadece bir HtmlString dize dönüştürür dize nesneye .ToHtmlString() eklenen bir uzantısı yöntemi herhangi bir işaretlemenin kaçmasını önleme. Bu gibi görünüyor: ... doğrulama metin vb ValidationSumary veya ValidationFor önce kodlanan

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

Gerçekten hoş bir çözüm Ben! Html.ValidationSummary() == null'nın ilk defa olup olmadığını ve çıktıdaki 'Html.Raw()' ı kullanıp kullanmadığımı test ettim ancak çok iyi çalışıyor. Teşekkürler! –

+0

Bu zeki :) –

2

sadece ... tu daha sonra bir MvcHtmlString oluşturmak, html kodunu çözmek gerek

exemple:

:

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

bu i MvcHtmlString hale getirmek için yaptığımız bir uzantısıdır

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

veya bu yeniden planlıyorsanız bir HtmlHelper oluşturabilirsiniz:

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(); 
     } 
    } 
} 

siz veya gelecekteki izleyici yardımcı umuyoruz. Not: tüm doğrulamalar için çalışır Özet ve Doğrulama ...

O @Benoit önerdi ne çok benzer
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToHtmlString())) 

, sadece uzantısı gerek kalmadan: Eğer ModelStateError HTML geri gönderiyorsanız

0

, bu bir astar kullanabilirsiniz.