2013-08-04 18 views
7

Tôi đang sử dụng RazorEngine không có khung MVC. Điều đó có nghĩa là tôi không có HtmlHelper để tạo mẫu.Sử dụng-tuyên bố trong RazorEngine (không có HtmlHelper từ MVC)

Tốt thôi, tôi không cần bất kỳ phương pháp nào từ nó. Nhưng tôi cần tạo các phương thức của riêng mình như BeginForm.

Bây giờ, chúng được thực hiện bằng HtmlHelper.ViewContext.Writer.Write, mà tôi không có. Có một chiếc "ngoài hộp" không, hay tôi phải làm một số phép thuật ở đây?

+0

Bạn đang sử dụng [Dao cạo trang web] (http://www.asp.net/web-pages/overview/getting-started/aspnet-web-pages- (dao cạo) -faq) hoặc chỉ [RazorEngine] (http://razorengine.codeplex.com/)? –

+0

Tôi đang sử dụng RazorEngine tinh khiết từ kho lưu trữ github (do đó liên kết thứ hai) – Richard

Trả lời

11

RazorEngine được thiết kế với việc tạo ra các loại của riêng bạn để sử dụng trong chính Engine.

Đầu tiên tạo Helpers riêng bạn:

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

Tiếp theo, tạo mẫu riêng của bạn:

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

Trước Parsing thiết TemplateServiceConfiguration của bạn:

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

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

Bây giờ RazorEngine có @Html.Partial()@Url.Encode() có sẵn trong chế độ xem.

+0

Cảm ơn bạn đã trả lời. Đó thực sự là điều tôi biết. Nhưng tôi không biết làm thế nào để thực hiện một chức năng như BeginForm (với giao diện IDisposable). – Richard

+0

Vì vậy, có lẽ bạn đang tìm kiếm [Tạo MVC3 Razor Helper như Helper.BeginForm()] (http://stackoverflow.com/questions/7196276/creating-mvc3-razor-helper-like-helper-beginform). –

+0

Cảm ơn câu trả lời của bạn, nhưng ví dụ này là sử dụng HTMLHelper mà provdes ViewContext.Writer - mà tôi không có – Richard

Các vấn đề liên quan