我找不到从简单的html字符串构建ViewResult的方法。我尝试了许多解决方案,从简单到更精细,但似乎我总是在这个过程中失去(主页面/布局)。从字符串(而不是字符串)呈现MVC 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);
}
}
从等于该工作的结果只是调用视图(“MyView的”模型),从动作,我去:
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");
}
}
仍在工作,但没有更多的(母版页/布局),只是普通测试。那么医生怎么了?
编辑: 我觉得我需要对我的目标更具体。我有大约十个cshtml页面,我必须在所有MVC项目中复制它们,因为它们都被使用。这些页面使用的HtmlHelper扩展充满只有一个方法调用,比如:
@Html.MvcSharedMenu()
在这些扩展方法我MvcHtmlStrings合作建立的HTML,我想我可以打电话给我的这些“自定义控件”。我知道Razor Generator,但是我想避免这种解决方案,尤其是当所有的代码已经在视图之外。
“主页”仅适用于ASP.NET WebForms,以及某种程度上,ASP.NET MVC的(传统)ASPX视图引擎 - 它们在ASP.NET MVC中并不存在。 Razor有一个类似(但更灵活)的系统,称为“布局”,与ASPX的主页面略有不同。请澄清你的问题。 – Dai
“母版页”是错误的术语,但是如果他已经显示并且它消失了,那么可以肯定地说他正在使用布局。 –
实际上,我不同意,微软把它称为母版页,并且在MVC MSDN文档中返回一个View()时,无论是名称是语义还是不同的讨论,我们都知道微软对它的命名约定的细致使用如果你已经阅读过Microsoft Style of Style文档,那么他们称之为母版页可以让你继续下去,以便你可以调用它,如果你愿意:https://msdn.microsoft.com/en -us/library/system.web.mvc.controller.view(v = vs.118).aspx#M:System.Web.Mvc.Controller.View%28System.String,System.String,System.Object%29 –