タイトルが示すように。プログラムでインスタンス化してHtmlヘルパーのリストを取得したいMVC3Razorビューがあります。
誰かがこれにアプローチする方法について何か良い提案がありますか?
前もって感謝します
タイトルが示すように。プログラムでインスタンス化してHtmlヘルパーのリストを取得したいMVC3Razorビューがあります。
誰かがこれにアプローチする方法について何か良い提案がありますか?
前もって感謝します
これは、カスタムビューの結果を実行し、HTMLヘルパーからモデルを更新することで実現できました。
アクション方法:
public ActionResult GetListViewHelpers()
{
var model = new TestModel(); // has >>> public List<MyHelper> Helpers { get; set; }
var testContext = new ControllerContext();
testContext.Controller = new MyController();
testContext.HttpContext = HttpContext;
testContext.RouteData.Values["controller"] = "MyController";
testContext.RouteData.Values["action"] = "Index";
var view = new TestViewResult();
view.ViewData.Model = model;
view.ViewName = "TestView"; // i want a list of the helpers from this view
view.ExecuteResult(testContext);
return View(model); // model.Helpers contains a list of helpers within a required view
}
結果の表示:
public class TestViewResult : ViewResult
{
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
if (String.IsNullOrEmpty(ViewName))
ViewName = context.RouteData.GetRequiredString("action");
ViewEngineResult result = null;
if (View == null)
{
result = FindView(context);
View = result.View;
}
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
ViewContext viewContext = new ViewContext(context, View, ViewData, TempData, writer);
using (stream)
using (writer)
{
View.Render(viewContext, writer);
writer.Flush();
}
if (result != null)
result.ViewEngine.ReleaseView(context, View);
}
}
ヘルパー:
public static MvcHtmlString AHelper(this HtmlHelper helper, string name)
{
var model = (TestModel)helper.ViewData.Model;
if(model.Helpers == null)
model.Helpers = new List<MyHelper>();
model.Helpers.Add(new MyHelper()
{
Name = name // add all the info i want from the helpers overloads
});
// .... helper logic here
return null;
}