2010-07-28 29 views
17

DropDownListFor gibi davranan ama daha önce karşılaştığım aynı problems'dan muzdarip olan kendi küçük HTML yardımcımı yazmaya çalışıyorum. DropDownListFor'un — kusurlu olup olmadığını tartışmayalım, bu sorunun ne olduğu değil.ASP.NET MVC: ToMvcHtmlString neden açık değil?

Her neyse, MVC adamlarının dahili ve halka açık olmayan ToMvcHtmlString yapmasının nedeni nedir?

cevap

8

Benim tahminim, bunun yerine System.Web.HtmlString'u kullanmanızı tavsiye etmektir. Ama evet, bunu kendim merak ettim ve kendi yardımcılarımda yinelenen bir ToMvcHtmlString uzantısı yazdım.

MvcHtmlString, IIRC, yalnızca uyumluluk düzeltmeleri, böylece MVC 2 hem .NET 3.5 hem de 4 üzerinde çalışabilir - ancak daha sonra kendi kodunuzda bunun için kullanışlıdır.

5

Bu sorununuzu çözüyor mu?

public static MvcHtmlString SuperDenizControl(this HtmlHelper html) 
{ 
    var builder = new TagBuilder("select"); 
    //blah blah blah amazing control 
    var control = builder.ToString(); 
    return MvcHtmlString.Create(control); 
} 
+0

Sorun değil, sadece nedenini merak ettim. Bu arada serin yöntem ismi! :) –

23

Bu soruyu yanıtlayabilecek ve bu soruna rastlayabilenler için kolay bir çözüm yollayabileceğimi düşündüm. MVC bir kaynaktan

:

internal MvcHtmlString ToMvcHtmlString(TagRenderMode renderMode) { 
    return MvcHtmlString.Create(ToString(renderMode)); 
} 

MvcHtmlString.Create ve TagBuilder.ToString Hem böylece halka açıktır ToMvcHtmlString iç iken kamu yöntemler kullanır olarak

, atlamak için oldukça kolaydır sadece

ile

return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal); 

yerine

ve gitmeye hazırsınız! Benim için harika çalışıyor. Ayrı bir iç yöntem yapmaktan neden rahatsız olduklarını bile bilmiyoruz.