2010-01-18 10 views
20

Şu anda dize oluşturucu ve adil miktarda karmaşık mantık kullanarak bir dize döndüren bir HtmlHelper uzantısı var. Şimdi alınır kendisine ekstra bir şey eklemek istediğiniz bir ASP.NET MVC Bir Html Yardımcısı İçinde Render Kısmi Kullanılıyor

public static string MyHelper(this HtmlHelper helper) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("Hi There"); 
    builder.Append(RenderPartial("MyPartialView")); 
    builder.Append("Bye!"); 
    return builder.ToString(); 
} 

Şimdi tabii RenderPartial bu gelmez bu yüzden tepki doğrudan kılan kısmi çağrı, böyle bir şey ... hale çalışmayacak ve ben ettik dizeleri kısmi işlemek için birkaç çözüm çalıştı ama hepsi bir tane üzerine düştüğü görünüyor HtmlHelper o kısmi içinde kullanın.

Bu mümkün mü?

cevap

67

Bu soru, eski ve işaretlenmiş yanıtlanmış olsa da, google'da gösterilmesine rağmen, farklı bir yanıt vereceğim.

asp.net mvc 2 ve 3'te, RenderPartial gibi çalışan bir Html.Partial (...) yöntemi vardır, ancak kısmi görünümü doğrudan oluşturmak yerine bir dizge olarak döndürür.

Sizin örnek böylece haline gelir:

//using System.Web.Mvc.Html; 
public static string MyHelper(this HtmlHelper helper) 
{ 
    StringBuilder builder = new StringBuilder(); 
    builder.Append("Hi There"); 
    builder.Append(helper.Partial("MyPartialView")); 
    builder.Append("Bye!"); 
    return builder.ToString(); 
} 
+2

Çok teşekkürler. Gerçekte, bu doğru cevap olarak işaretlenmelidir. – Amrit

+11

Mükemmel çalışıyor, Bu satırı vurgulamak istiyorum: 'using System.Web.Mvc.Html'. –

+0

Bir ton teşekkürler, Çalıştığı çekicilik :) –

-2

Yardımcılardan kısmi çağrı yapmamalısınız. Yardımcılar görüşlerine "yardım et" ve çok fazla değil. MVCContrib'dan (şimdi ihtiyacınız varsa) veya MVC v2'dan (birkaç ay daha bekleyebilirseniz) RenderAction yöntemine bakın. Modelinizi standart bir kontrolör eylemine geçirebilir ve kısmi bir sonuç elde edebilirsiniz.

+0

+1 evet sana, yardım kısmi işlemek istemem. – griegs

+0

Bazı durumlarda evet (muhtemelen buna dahil), ancak HTML'imi HTML gibi dosyaları olabildiğince uzak tutmaya çalışıyorum ve bunları birleştirmek için mantığı yapmak için Html yardımcılarını kullanın. Bu şekilde, html'mde hala güzel editör özellikleri elde ediyorum. Ancak kısmi render kullanmamak, bu durumda yaptığım şeydir. –

+0

Sorunun yanıtlanmadığından emin değil misiniz? – nixon

İlgili konular