Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html MVC4:如何将字符串转换为IView?_Html_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

Html MVC4:如何将字符串转换为IView?

Html MVC4:如何将字符串转换为IView?,html,asp.net,asp.net-mvc,asp.net-mvc-4,razor,Html,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我的目的是将字符串渲染到视图中。这就是我所做的: public string RenderRazorViewToString(string viewName, object model, string controllerName) { ViewData.Model = model; Type controllerType = Type.GetType(controllerName + "Controller"); object controller = Activato

我的目的是将字符串渲染到视图中。这就是我所做的:

public string RenderRazorViewToString(string viewName, object model, string controllerName)
{
    ViewData.Model = model;
    Type controllerType = Type.GetType(controllerName + "Controller");
    object controller = Activator.CreateInstance(controllerType);
    RouteData rd = new System.Web.Routing.RouteData();
    rd.Values.Add("controller", "Account");
    ((ControllerBase)(controller)).ControllerContext = new ControllerContext(HttpContext, rd, (ControllerBase)controller);
    ControllerContext cc = ((ControllerBase)(controller)).ControllerContext;

    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindView(cc, viewName, null);
        var viewContext = new ViewContext(cc, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);
        viewResult.ViewEngine.ReleaseView(cc, viewResult.View);
        return sw.GetStringBuilder().ToString();
    }
}
基本上,这段代码所做的是呈现一个视图文件,该文件位于:

var viewResult = ViewEngines.Engines.FindView(cc, viewName, null);
并将其呈现在:

viewResult.View.Render(viewContext, sw);
我想要的不是查找视图文件,而是将存储在数据库中的视图呈现为字符串。所以我需要的是:

  • 获取数据库视图字符串
  • 呈现数据库视图字符串
  • 渲染后将其输出为字符串
  • 如何实现这一点?

    您只需使用

    @Html.Raw(mystring)
    

    mystring将是存储在数据库中的视图内容

    您能解释一下为什么StackOverflow上已经提出的其他类似问题不适用于您的案例吗?事实上,我已经尝试了两种解决方案,但我的情况不同。我尝试过RazorEngine,但razor引擎的缺点是它无法解析mvc视图的html帮助程序和url帮助程序。还有virtualpathprovider,我不希望整个路由系统变成虚拟的。我仍然想使用我的路由系统,但是有了VPP,系统被迫在每个路由上遵循VPP,因为VPP是在global.asax中分配的。因此,这两种解决方案都不起作用。我猜VPP可能是可行的,但前提是我只能在我的spesific控制器上实现VPP,但我不知道如何实现。让RazorEngine支持Html助手之类的东西是可行的。也许这对你有用。使用RazorEngine来支持MVC太复杂了,我已经尝试了很多。非常感谢您的建议,但我正在考虑未来的术语,当我需要使用另一个助手(如TokenValidation等)时。另外,当我在@model.ThisModel之后写入@{variable=“values”}时,会出现语法错误。因此,我认为使用RazorEngine是不可靠的。如果您不愿意尝试让RazorEngine为此工作,那么您的下一个最佳选择可能是创建一个VirtualPathProvider,它使用特定的路径签名来指示您正在尝试从数据库中提取。对于任何与该签名不匹配的路径,它都会立即退出,因此,对它进行全球注册并不是什么大问题。MVC将循环使用所有已注册的VirtualPathProviders,因此您的路径提供程序可能只是常规提供程序的一个后备。这不起作用,因为Raw()只显示字符串而不呈现它。我需要所有的帮助,如Html.BeginForm、Url.Action等。。首先要翻译成html。