2015-07-08 13 views
6

Aşağıda bulunan ustura kodunu bir .cshtml dosyasında çalıştırıyorum (bu, elde etmem gereken daha karmaşık bir şeyin basitleştirilmiş bir versiyonu), ancak renderTestB yardımcısı çalıştırılamıyor gibi görünüyor.Neden bir Razor yardımcısı başka bir yardımcı çağırmıyor?

@renderTestA("test string 1", "test string 2"); 

@helper renderTestA(string input1, string input2) 
{ 
    <div> 
     @renderTestB(input1) 
     @renderTestB(input2) 
    </div> 
} 

@helper renderTestB(string input) 
{ 
    <p class="test">@input</p> 
} 

Neden? Ve yapmaya çalıştığım şeyi başarmanın başka bir yolu var mı?

Paragraf kodunu renderTestA yardımcısında çoğaltıp alabildiğinin farkındayım, ancak açık bir şekilde yeniden kullanılabilen bir kod çözümünü tercih ediyorum.

+0

Bu iyi uygulama, mantığınızı görünümlerinize tanıtmak mı? Neden özel bir yardımcı yazmıyorsun? – Matt

+0

Bu, MVC'nin eski sürümlerinden geriye kalan bir uygulamadır. Artık özel HTML yardımcılarını kullanmak kesinlikle daha iyi. – br4d

+2

Bu benim için iyi çalışıyor. "Yapmıyor gibi görünüyor" dediğinizde, istediğiniz sonucu görmediğiniz anlamına mı geliyor? belki de başka bir şey yanlıştır, çünkü bu sizin gerçek kodunuzu bilmemek zor: – JamieD77

cevap

0

Böyle bir şeye ne dersiniz?

@renderTestA(renderTestB("test string 1"), renderTestB("test string 2")) 

@helper renderTestA(string input1, string input2) 
{ 
    <div> 
     @input1 
     @input2 
    </div> 
} 

@helper renderTestB(string input) 
{ 
    <p class="test">@input</p> 
} 

Sen bu özellikler norm olmadan önce @helper işlevselliği geri kullanıldı olarak yerine Editör/Görüntü şablonları veya özel HTML yardımcıları kullanmayı düşünmelisiniz.

Neden yuvalayamayacağınız konusunda. Yukarıda önerilen sözdizimini kullanarak kolayca önlenebilecek bir dizi problemi ortaya çıkarmaktadır. Örneğin ... iç içe geçmiş yardımcıların dairesel bir döngüsüne sahipseniz, kolayca taşmaya neden olabilir.

İlgili konular