从字符串(而不是字符串)渲染MVC ViewResult而不丢失母版页

时间:2017-04-24 17:07:33

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我找不到从简单的html字符串构建ViewResult的方法。我尝试了很多从简单到详细阐述的解决方案,但似乎我总是在这个过程中丢失(母版页/布局)。

这是一个有效的解决方案,显然因为我在这里没有做任何特别的事情:

public class MyActionResult : ViewResult
{
    public MyActionResult(controller controller, object model)
    {
        this.ViewName = "MyView";
        this.ViewData.Model = model;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        base.ExecuteResult(context);
    }

}

从这个等于仅从动作中调用View(“MyView”,model)的工作结果,我去了:

public class MyActionResult : ViewResult
{
    public MyActionResult(GenericController controller, object model)
    {
        this.View = new MyView(controller, model);
    }

    public override void ExecuteResult(ControllerContext context)
    {

        base.ExecuteResult(context);
    }

}

public class MyView : IView
{
    public MyView(GenericController controller, object model)
    {
    }

    public void Render(ViewContext viewContext, TextWriter writer)
    {
        writer.Write("TEST");
    }
}

仍在工作,但没有更多(母版页/布局),只是简单的TEST。那医生怎么了?

编辑: 我觉得我需要更加明确我的目标。我有大约十个cshtml页面,我必须在我的所有MVC项目中复制,因为它们都被所有人使用。这些页面只使用HtmlHelper扩展名填充一个方法,如:

@Html.MvcSharedMenu()

在这些扩展方法中,我使用MvcHtmlStrings来构建我的html,我想我可以称之为“自定义控件”。我知道Razor Generator,但我想避免使用该解决方案,尤其是当所有代码都已经在View之外时。

1 个答案:

答案 0 :(得分:0)

阅读完编辑后,或许您想要的是:

return View("~/pathToYourView/View.cshtml", yourViewModel);

这不会让您不必创建.cshtml文件,但它使您不必创建其中的十个.cshtml文件。如果每个模型只是一个字符串,那么所有控制器方法都可以共享相同的视图。