Asp.net core中ViewComponent之间如何共享ViewData

2024-02-15

我有两个 ViewComponent,我想使用 ViewData 或其他技术来共享一些数据,然后在主视图中使用这些数据,但这不是方法,当两个 ViewComponent 的 if 条件丰富时,每个 ViewComponent 的 ViewData 为 null。

public class OneViewComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync(Page page, Zone zone)
    {
        //some operation

        string text = "one";

        if(ViewData["data"] != null)
        {
            ViewData["data"] = ViewData["data"].ToString() + text;
        }
        else
        {
            ViewData["data"] = text;
        }

        return View();
    }
}

public class TwoViewComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync(Page page, Zone zone)
    {
        //some operation

        string text = "two";

        if(ViewData["data"] != null)
        {
            ViewData["data"] = ViewData["data"].ToString() + text;
        }
        else
        {
            ViewData["data"] = text;
        }

        return View();
    }
}

ViewData就像ViewBag。仅当您想要将数据从控制器传输到视图时才使用它。为此我总是更喜欢视图模型。

要跨组件传输数据,您有以下两个选项:

Using TempData字典代替ViewData字典:您需要安装以下软件包

Install-Package Microsoft.AspNetCore.Mvc.ViewFeatures

In your Startup类,添加这一行

services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();

to your ConfigureServices方法。我用CookieTempDataProvider作为实施ITempDataProvider但你可以使用SessionStateTempDataProvider.

将数据存储到TempData字典你使用这个代码:

this.TempData["data"] = "my value";

从中检索数据TempData你使用这个代码:

var data = this.TempData["data"];

要在组件视图中使用它:

@this.TempData["data"]

Using HttpContext.Items字典:没有要安装的包。在您的视图组件类中,将数据存储在HttpContext.Items像这样的字典:

this.HttpContext.Items["data"] = "my value"; 

并通过执行以下操作访问存储的数据:

var data = this.HttpContext.Items["data"];

在组件视图中,您可以通过执行以下操作来获取存储的数据:

@this.Context.Items["data"]

和...之间的不同TempData and HttpContext.Items: 之间的主要区别HttpContext.Items and TempData字典是:

  • HttpContext.Items当请求结束时被清除。
  • 默认情况下TempData读取数据时清零。要保留数据,您需要显式调用TempData.Keep()
  • 使用时您可以轻松测试您的视图组件TempData因为它是一个类型的接口ITempDataDictionary可以毫无困难地嘲笑它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.net core中ViewComponent之间如何共享ViewData 的相关文章

随机推荐

  • ASP.NET MVC 从 C# 代码创建绝对 url

    如何从 C 代码生成绝对 url 我想生成一个像这样的网址 localhost controller action id 有没有办法在 C 中做到这一点 就像在视图中完成它一样 它不会在控制器内部生成 而是在 ViewModel 内部生成
  • $.getJSON 获取 JSONP 数据

    我通过以下方式使用 getJSON 来接收警报 但没有运气 这是代码 并且ticker js文件只有以下行 ticket IBM price 14 57 它应该收到警报 14 57 但我没有收到警报 如果您想查看它的实际效果 可以尝试该链接
  • java.awt.Robot 的本机源代码

    我正在尝试找到 Java Robot 函数的本机实现 我找到了Windows的实现here http cr openjdk java net ohair openjdk7 jdk7 build copyright webrev jdk sr
  • “MongoDB Compass”无法打开,因为苹果无法检查它是否有恶意软件

    当我尝试在 macOS Catalina 上安装 MongoDB Compass 时 出现以下情况 MongoDB Compass can t be opened because Apple cannot check it for mali
  • 可以处理 HTTPS 的 WebBrowser 控件

    我正在寻找 NET 中可以处理 HTTPS 的 WebBrowser 控件的替代品 这个问题 https stackoverflow com questions 790542 replacing net webbrowser control
  • 使用 dash python 更改 bootstrap nav-pills 样式

    Dash 允许使用我们自己的 CSS 样式表 但是 如果您在科学领域并且不熟悉 CSS 则可以使用 Bootstrap 组件 这使得样式和页面布局非常容易组合在一起 这是在 dash 中创建侧边栏的标准示例 This app creates
  • Android 6.0 Marshmallow 停止显示垂直 SeekBar 拇指

    我一直在使用这个基本的包装器 https stackoverflow com a 28397530 250340在 SeekBar 周围 但发现它隐藏了拇指 或者做了一些时髦的事情 比如在棉花糖下的白色背景上将其变成白色 我使用 AS Bl
  • 企业报告解决方案[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ListView Flutter 的单选

    我正在尝试实施一个listView在我的应用程序中进行单选 这样一旦点击列表中的项目 按下的项目颜色状态就会与其他项目不同 我已经做了我所知道的一切 但效果并不好 问题是 即使我的实现在按下时更新每个项目的状态 它也不会将其他项目重置为其初
  • 无法将 Web.Http.Results.JsonResult 隐式转换为 Web.Mvc.JsonResult

    我已经在控制器上设置了这个测试方法 以消除任何复杂性 根据我通过搜索找到的所有结果 这应该可行 我不确定我在这里缺少什么 public JsonResult test return Json new id 1 这是我得到的错误 无法将类型
  • 在 PHP 5 中如何通过引用传递对象?

    在 PHP 5 中 您是否需要使用 修饰符通过引用传递 例如 class People p new People function one a a null function two a a null 在 PHP4 中你需要 修改器来在更改
  • 缓冲读取器和文件读取器以及扫描器类之间的区别[重复]

    这个问题在这里已经有答案了 谁能解释一下班级之间的区别BufferedReader FileReader and Scanner 当我想读取文本文件时该使用哪一个 Well FileReader只是一个Reader它使用平台默认编码 urg
  • KJUR jws jsrsasign:无法在 JWT.io 上验证 ES256 令牌

    我们正在尝试使用 KJUR jws 库为 Apple Search Ads 制作 JWT 令牌 我们使用的是Apple的API文档 https developer apple com documentation apple search a
  • GridView PageIndexChanging 不起作用

    这似乎是一个很容易问的问题 但我无法在 GridView 中显示项目 这是我的代码 public partial class TestList System Web UI Page protected void Page Load obje
  • 在圆上找到最接近给定点的点的最佳方法

    给定一个点 pX pY 和一个已知圆心 cX cY 和半径 r 的圆 您可以想出最短的代码量来找到圆上最接近 pX pY 我有一些代码可以工作 但它涉及将圆转换为 x cX 2 y cY 2 r 2 其中 r 是半径 形式的方程并使用方程绘
  • 了解代码优先的虚拟属性

    您好 我刚刚学习使用实体框架代码优先 我似乎无法理解一些东西 我根据教程创建了三个模型 public class Course public int CourseID get set public string Title get set
  • python脚本在windows中运行时是什么用户? [复制]

    这个问题在这里已经有答案了 我试图让 python 删除一些目录 但出现访问错误 我认为是python用户帐户没有权限 WindowsError Error 5 Access is denied path 是我运行脚本时得到的结果 我试过了
  • 映射结构:使用“.”作为目标属性 - 目前是否支持?

    我想按如下方式使用映射结构 Mapping target source object1 subobject2 subobject3 public abstract Object4 toObject Object1 object1 作为对象
  • KML 图层限制问题

    我已通过 url 将 6 kml 图层加载到我的网站 以便通过复选框关闭 打开 但我最近注意到 它只允许我在给定时间显示 4 公里 当我选择超过 4 个时 第 5 个和第 6 个不会显示 我选择什么并不重要 它似乎限制我只能显示 4 有人可
  • Asp.net core中ViewComponent之间如何共享ViewData

    我有两个 ViewComponent 我想使用 ViewData 或其他技术来共享一些数据 然后在主视图中使用这些数据 但这不是方法 当两个 ViewComponent 的 if 条件丰富时 每个 ViewComponent 的 ViewD