これは確実に実行できますが、 とは異なる拡張メソッドを使用する必要がありますRenderPartial
。これらは応答に直接書き込むためです。テンプレートで正常に動作Partial
する を返す拡張メソッドを試しました。MvcHtmlString
これは私のテスト T4 ランタイム テンプレート、RuntimeTextTemplate1.tt です。
<#@ template language="C#" #>
<#@ import namespace="System.Web.Mvc.Html" #>
LogOnPartial:
<#= Html.Partial("_LogOnPartial") #>
HtmlHelper
次に、いくつかの ASP.NET MVC フープをジャンプして、実際のインスタンスをテンプレートに取得する必要もあります。
Html
プロパティをテンプレートに追加してインスタンス化しHtmlHelper
、コンストラクターを提供するために、部分クラスを作成しました。
public partial class RuntimeTextTemplate1
{
public HtmlHelper Html
{
get;
private set;
}
public RuntimeTextTemplate1(ViewContext viewContext, IViewDataContainer viewDataContainer)
{
Html = new HtmlHelper(viewContext, viewDataContainer);
}
}
はとを作成するHtmlHelper
必要があり、それらには別の依存関係があります。いくつかのダミー クラスを使用して、コントローラーから必要なものを提供しました。ViewContext
IViewDataContainer
public class HomeController : Controller
{
public ActionResult TemplateTest()
{
var viewContext = new ViewContext(ControllerContext, new DummyView(), ViewData, TempData, TextWriter.Null);
var template = new RuntimeTextTemplate1(viewContext, new ControllerViewDataContainer(this));
return Content(template.TransformText());
}
}
public class DummyView : IView
{
public void Render(ViewContext viewContext, TextWriter writer)
{
// Do nothing
}
}
public class ControllerViewDataContainer : IViewDataContainer
{
private Controller controller;
public ViewDataDictionary ViewData
{
get { return controller.ViewData; }
set { }
}
public ControllerViewDataContainer(Controller controller)
{
this.controller = controller;
}
}
そして、テンプレート出力を正常に取得しました。
したがって、これを行うことはできますが、特定の状況、それをどの程度正確に使用する必要があるか、ビューをどのようにパラメーター化するか、HtmlHelper
インスタンスに到達するために必要なクラスをどのように組み立てるかによって異なります。
最終的に、テンプレートを必要な出力の主要なソースにし、これをビュー内およびビュー外で使用する方が、その逆よりも簡単であることがわかる場合があります。