首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能在MVC3Razor视图中以编程方式获得助手列表吗?

我能在MVC3Razor视图中以编程方式获得助手列表吗?
EN

Stack Overflow用户
提问于 2012-09-14 18:17:15
回答 1查看 197关注 0票数 0

正如标题所述。我有一个MVC3Razor视图,我想以编程方式实例化它,并获得它的Html助手列表。

有谁有什么好的建议来解决这个问题呢?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-05 17:52:46

我能够通过执行自定义视图结果并从我的html助手更新模型来实现这一点。

操作方法:

代码语言:javascript
复制
    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
    }

查看结果:

代码语言:javascript
复制
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);            
    }
}

帮助者:

代码语言:javascript
复制
    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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12422524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档