在.NET后端运行js

问题描述 投票:0回答:1

好吧,我完全理解这不是你应该做的事情,但无论如何我想尝试一下。

我有一个有点大的网站,其中有

.cshtml
文件。所以这是在服务器上执行的,本质上是服务器端渲染的,所以对于客户端来说非常敏捷。

但是在这个页面上我有一个元素想要移动到svelte。 没什么大问题,我可以在 .NET 之外构建组件,包含捆绑包并告诉它在哪里渲染。这种方法的唯一问题是该组件不是服务器端渲染的。

因此,我更新了构建配置,不生成客户端捆绑包,而是生成 SSR 捆绑包,这意味着我可以访问 javascript

.render()
函数,该函数可以整齐地输出 html 和 css。

现在讨论当前的问题: 我可以以某种方式从

cshtml
文件导入此包,运行渲染方法,并将 html 输出值作为 html 插入到从服务器发送到客户端的内容中吗?

javascript c# .net svelte server-side-rendering
1个回答
0
投票

您可以使用 .NET 中的 RazorViewEngine 将 CSHTML 文件渲染为字符串。

在 ASP.NET MVC 中,您可以使用 RazorViewEngine 将视图渲染为字符串。

这是一个例子:

1 创建一个辅助方法来渲染视图:

Add a helper method in a utility class or directly in your controller.

public string RenderViewToString(ControllerContext context, string viewPath, object model = null)
{
    ViewDataDictionary viewData = new ViewDataDictionary(model);
    TempDataDictionary tempData = new TempDataDictionary();
    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(context, viewPath);
        var viewContext = new ViewContext(context, viewResult.View, viewData, tempData, sw);
        viewResult.View.Render(viewContext, sw);
        return sw.GetStringBuilder().ToString();
    }
}
  1. 在控制器中使用辅助方法:

    公共 ActionResult MyAction() { var model = new MyModel(); string htmlString = RenderViewToString(this.ControllerContext, "~/Views/MyController/MyView.cshtml", model);

     // Use the HTML string as needed
     return Content(htmlString);
    

    }

© www.soinside.com 2019 - 2024. All rights reserved.