Asp.Net Core将ViewComponent渲染为变量

贾卡·本田

我正在尝试ViewComponent在ASP.NET Core 3.0(页面)中的服务中呈现为字符串。

我发现了两个部分解决方案,但都适用于3.0之前的旧版本,并且有一些我不知道如何解决的问题。

  • 第一个来自GitHub Gist,但在设计时考虑了控制器,NullView并被删除了3.0(实际上很难找到任何参考)。
  • 第二个选项在这里,但是在第42行失败(找不到视图)。我认为这是由于.net核心所做的更改所致,现在已经预编译了视图,因此razor视图引擎无法找到它们。

我做了一些自己的实验,但无法正常工作(我认为我所面临的问题与我发布的第二个解决方案相同)。对于此问题的任何帮助,我将不胜感激。我已将我的最佳尝试和最小项目添加到GitHub,其中Render位于Service文件夹中,而Index.cshtml.cs是对该服务的调用。

谢谢!

负数

原因

  1. NullView现在是内部类。但这是一个非常简单的类,什么也不做。换句话说,只需将其从src复制并粘贴到您的源代码中即可。
  2. 您上面链接的教程用于呈现纯视图。但是,由于尝试渲染视图组件而不是视图,因此应避免直接传递视图路径您应该改为传递ViewComponent类名(或Type)。

    Model = await _viewRender.RenderToStringAsync(
          
           
          “ /Components/Test/Default.cshtml”,//
          不要传递视图路径,因为我们不是渲染视图文件,而是渲染视图组件
        “ Test”,                             //因为`ViewComponent `名称为Test 
        new TestModel {StrToPrint =“从服务打印”});
        
         
         
          
         
         
    
  3. 根据官方文档,运行时将在以下路径中搜索视图

    1. / Views / {控制器名称} / Components / {View组件名称} / {View名称}
    2. / Views / Shared / Components / {查看组件名称} / {查看名称}
    3. / Pages / Shared / Components / {查看组件名称} / {查看名称}

    但是,您的TestViewComponent驻留在中Pages/Components/Test/Default.cshtml默认情况下Razor找不到配置自定义视图位置,或将其移动到标准位置,以便Razor可以找到视图文件。

  4. 最后,将ViewComponent呈现为页面似乎有些过大。我建议你应该使用IViewComponentHelper呈现ViewComponent为一个IHtmlContent,这样我可以写到StringWriter

    public class MyViewComponentContext 
    {
        public HttpContext HttpContext { get; set; }
        public ActionContext ActionContext { get; set; }
        public ViewDataDictionary ViewData { get; set; }
        public ITempDataDictionary TempData { get; set; }
    }
    private async Task<string> Render( MyViewComponentContext myViewComponentContext,string viewComponentName,object args) {
        using (var writer = new StringWriter())
        { 
            var helper = this.GetViewComponentHelper(myViewComponentContext, writer);
            var result = await helper.InvokeAsync(viewComponentName, args);  // get an IHtmlContent
            result.WriteTo(writer, HtmlEncoder.Default);
            await writer.FlushAsync();
            return writer.ToString();
        }
    }
    

演示版

如果如上所述解决问题,则在运行项目时,我会得到正确的结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Asp.net Core - 如何从 javascript 为 ViewComponent 调用异步?

来自分类Dev

ASP.NET CORE将Razor视图渲染为带有控制器参数的字符串

来自分类Dev

无法识别ASP.NET Core ViewComponent的Invoke()方法调用

来自分类Dev

asp.Net Core ViewComponent不显示CSS

来自分类Dev

在ASP.Net Core MVC视图中刷新ViewComponent

来自分类Dev

将Razor视图渲染为ASP.NET 5中的字符串

来自分类Dev

ASP.NET MVC 4中的ViewComponent

来自分类Dev

将ASP.NET显示为XML

来自分类Dev

ASP.NET-Core嵌套的ASP TagHelper

来自分类Dev

Asp.NET Core MVC Razor页面渲染中的NotSupportedException

来自分类Dev

ASP.NET布尔变量

来自分类Dev

ASP.NET Core返回

来自分类Dev

ASP.NET Core WebSockets

来自分类Dev

从ASP.NET Core中的ViewComponent提交表单并执行控制器操作

来自分类Dev

如何在ViewComponent Asp.Net Core中获取当前的登录用户

来自分类Dev

ASP.NET Core 使用 ViewComponent 跟踪侧边栏的活动页面

来自分类Dev

与Asp.net相比,ASP.net CORE的主要优势

来自分类Dev

与ASP.NET MVC BeginExecuteCore等效的ASP.NET Core

来自分类Dev

从asp net 5迁移到asp net core时出错

来自分类Dev

asp .net 和 asp .net core 有什么区别?

来自分类Dev

将JavaScript变量发送到asp.net Webforms,代码始终为空

来自分类Dev

将JavaScript变量发送到asp.net Webforms,其代码始终为空

来自分类Dev

ASP.NET MVC 6(ASP.NET Core或ASP.NET5)中的友好URL

来自分类Dev

ASP.NET Core-如何将Java变量从View传递到Controller

来自分类Dev

如何将ASP.NET Core 1.0配置为使用本地IIS而不是IIS Express?

来自分类Dev

将 Json 对象从 Angular 解析为 C# ASP.Net Core Web API

来自分类Dev

部署机器上的 Asp.Net Core 2.1 Angular 模板将环境检测为“开发”

来自分类Dev

如何将 apache 配置为 asp.net core 的反向代理

来自分类Dev

使用将net461设置为唯一框架的ASP.NET Core Web应用程序(.NET Core)与使用(.NET Framework)模板之间的区别

Related 相关文章

  1. 1

    Asp.net Core - 如何从 javascript 为 ViewComponent 调用异步?

  2. 2

    ASP.NET CORE将Razor视图渲染为带有控制器参数的字符串

  3. 3

    无法识别ASP.NET Core ViewComponent的Invoke()方法调用

  4. 4

    asp.Net Core ViewComponent不显示CSS

  5. 5

    在ASP.Net Core MVC视图中刷新ViewComponent

  6. 6

    将Razor视图渲染为ASP.NET 5中的字符串

  7. 7

    ASP.NET MVC 4中的ViewComponent

  8. 8

    将ASP.NET显示为XML

  9. 9

    ASP.NET-Core嵌套的ASP TagHelper

  10. 10

    Asp.NET Core MVC Razor页面渲染中的NotSupportedException

  11. 11

    ASP.NET布尔变量

  12. 12

    ASP.NET Core返回

  13. 13

    ASP.NET Core WebSockets

  14. 14

    从ASP.NET Core中的ViewComponent提交表单并执行控制器操作

  15. 15

    如何在ViewComponent Asp.Net Core中获取当前的登录用户

  16. 16

    ASP.NET Core 使用 ViewComponent 跟踪侧边栏的活动页面

  17. 17

    与Asp.net相比,ASP.net CORE的主要优势

  18. 18

    与ASP.NET MVC BeginExecuteCore等效的ASP.NET Core

  19. 19

    从asp net 5迁移到asp net core时出错

  20. 20

    asp .net 和 asp .net core 有什么区别?

  21. 21

    将JavaScript变量发送到asp.net Webforms,代码始终为空

  22. 22

    将JavaScript变量发送到asp.net Webforms,其代码始终为空

  23. 23

    ASP.NET MVC 6(ASP.NET Core或ASP.NET5)中的友好URL

  24. 24

    ASP.NET Core-如何将Java变量从View传递到Controller

  25. 25

    如何将ASP.NET Core 1.0配置为使用本地IIS而不是IIS Express?

  26. 26

    将 Json 对象从 Angular 解析为 C# ASP.Net Core Web API

  27. 27

    部署机器上的 Asp.Net Core 2.1 Angular 模板将环境检测为“开发”

  28. 28

    如何将 apache 配置为 asp.net core 的反向代理

  29. 29

    使用将net461设置为唯一框架的ASP.NET Core Web应用程序(.NET Core)与使用(.NET Framework)模板之间的区别

热门标签

归档