📜  棱镜同步上下文 (1)

📅  最后修改于: 2023-12-03 14:55:52.084000             🧑  作者: Mango

棱镜同步上下文

介绍

棱镜同步上下文是Microsoft ASP.NET Core中的一种机制,用于在控制器和视图中传递数据。 它通过拦截控制器的Action方法并查找返回的数据,然后将其设置为视图加载时的上下文数据。

实现

在ASP.NET Core中,可以使用ViewDataViewBag来存储数据。 然而,这些变量的使用存在一些限制。 ASP.NET Core的开发人员必须使用不同的键名,才能在控制器和视图之间传递数据。 该限制可通过使用棱镜同步上下文来消除。

棱镜同步上下文的实现很简单,只需要添加.WithPrism()方法即可。 这将激活上下文拦截器,启用同步过程。

public void ConfigureServices(IServiceCollection services)
{
    services
        .AddControllersWithViews()
        .AddRazorRuntimeCompilation()
        .WithPrism(); // 使用棱镜同步上下文
}

当控制器返回数据时,将使用上下文拦截器查找该数据,并将其设置为视图的上下文数据。 然后,再次使用.WithContext()扩展方法即可从视图中检索该数据。

public IActionResult Index()
{
    var data = new MyDataModel();

    return View().WithContext(data);
}
使用

在视图中,可以直接调用@PrismContext.Data<MyDataModel>()方法,获取存储在上下文中的MyDataModel数据。

<h1>@PrismContext.Data<MyDataModel>().Title</h1>

如果需要在控制器和视图之间传递多个值,则可以使用实体对象来传递数据。

public class MyDataModel
{
    public string Title { get; set; }
    public string Message { get; set; }
}

public IActionResult Index()
{
    var data = new MyDataModel
    {
        Title = "Hello, World!",
        Message = "Welcome to my website!"
    };

    return View().WithContext(data);
}

在视图中,可以使用@Model来访问整个实体对象,也可以使用@PrismContext.Data<MyDataModel>().Title来访问单个属性。

<h1>@Model.Title</h1>
<p>@Model.Message</p>

<!-- 或者 -->

<h1>@PrismContext.Data<MyDataModel>().Title</h1>
<p>@PrismContext.Data<MyDataModel>().Message</p>
结论

使用棱镜同步上下文,可以方便地在ASP.NET Core应用程序的控制器和视图之间传递数据。 它消除了ASP.NET Core中使用.ViewData.ViewBag时的键名限制,并提供了一种简单的方法来传递实体对象。