我找不到从简单的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之外时。
答案 0 :(得分:0)
阅读完编辑后,或许您想要的是:
return View("~/pathToYourView/View.cshtml", yourViewModel);
这不会让您不必创建.cshtml文件,但它使您不必创建其中的十个.cshtml文件。如果每个模型只是一个字符串,那么所有控制器方法都可以共享相同的视图。