2013-08-04 17 views
7

MVC-Framework olmadan RazorEngine kullanıyorum. Yani, şablon oluşturmak için HtmlHelper'ım yok.RazorEngine'de Kullanım Bildirimi (MVC'den HtmlHelper olmadan)

Sorun değil, yine de herhangi bir yönteme ihtiyacım yok. Ama BeginForm gibi kendi yöntemlerimi oluşturmam gerekiyor.

Artık bunlar, sahip olmadığım HtmlHelper.ViewContext.Writer.Write ile yapıldı. Bunu yapmak için "kutunun dışında" var mı, yoksa burada sihir yapmak zorunda mıyım?

+0

[Web Sayfaları Jilet] 'i kullanıyor musunuz (http://www.asp.net/web-pages/overview/getting-started/aspnet-web-pages- (jilet) -faq) veya sadece [RazorEngine] (http://razorengine.codeplex.com/)? –

+0

Github deposundan saf RazorEngine kullanıyorum (ikinci bağlantı) – Richard

cevap

11

RazorEngine, Motorun kendisinde kullanılmak üzere kendi türlerinizin türetilmesiyle tasarlanmıştır.

İlk Kendi Yardımcılar oluşturun:

public class RazorHtmlHelper 
{ 
    public IEncodedString Partial(string viewName) 
    { 
     ITemplate template = RazorEngine.Razor.Resolve(viewName); 

     ExecuteContext ec = new ExecuteContext(); 

     RawString result = new RawString(template.Run(ec)); 

     return result; 
    } 
} 

public class RazorUrlHelper 
{ 
    public string Encode(string url) 
    { 
     return System.Uri.EscapeUriString(url); 
    } 
} 

Sonraki Kendi Şablon oluşturun: Ayrıştırma sizin TemplateServiceConfiguration ayarlamadan önce

public class RazorTemplateBase<T> : TemplateBase<T> 
{ 
    private RazorUrlHelper _urlHelper = new RazorUrlHelper(); 

    private RazorHtmlHelper _htmlHelper = new RazorHtmlHelper(); 

    public RazorUrlHelper Url 
    { 
     get 
     { 
      return this._urlHelper; 
     } 
    } 

    public RazorHtmlHelper Html 
    { 
     get 
     { 
      return this._htmlHelper; 
     } 
    } 
} 

: Artık

Razor.SetTemplateService(new TemplateService(
    new TemplateServiceConfiguration() 
    { 
    BaseTemplateType = typeof(RazorTemplateBase<>) 
    }; 
)); 

result = RazorEngine.Razor.Parse(templateText, model); 

RazorEngine @Html.Partial() ve @Url.Encode() sahiptir görünümler mevcuttur.

+0

Yanıtınız için teşekkür ederiz. Aslında bildiğim bir şey. Ama BeginForm (IDisposable-interface ile) gibi bir işlevi nasıl uygulayacağımı bilmiyorum. – Richard

+0

Muhtemelen [MVC3 Razor Yardımcısı'nı Helper.BeginForm() gibi oluşturma] (http://stackoverflow.com/questions/7196276/creating-mvc3-razor-helper-like-helper-beginform) gibi görünüyor. –

+0

Cevabınız için teşekkür ederiz, ancak bu örnek ViewContext.Writer'i geliştiren HTMLHelper kullanıyor - hangi bende yok – Richard