在 asp.net core razor 页面中使用带有部分视图的 DI [重复]

Posted

技术标签:

【中文标题】在 asp.net core razor 页面中使用带有部分视图的 DI [重复]【英文标题】:Using a DI with partial views in asp.net core razor pages [duplicate] 【发布时间】:2021-05-07 07:36:12 【问题描述】:

使用以下行正在使用部分视图(否则工作完全正常;当不使用 DI 时):

<partial
    name="Partials/SelectLoc"
    model="new Partials.SelectLocModel(new HttpClient(), (<this is the part with DI>))" />

LocationList 的 ctor 采用 LocationDbContext 类的对象,该对象基本上是 DbContext 的子对象。 但是,事实证明,我无法在对部分的调用中实例化 LocationDbContext

我该如何纠正这个问题?

【问题讨论】:

另外,与this的部分原因相同吗? 是的,我在回复中也提到了这个话题,但是很抱歉,我无法举报。 完成,如中,标记为重复 【参考方案1】:

我认为你应该使用View components而不是局部视图。视图组件就像具有模型、视图和控制器的局部视图。您可以直接将Dbcontext注入其中。

public class YourViewComponent : ViewComponent

private readonly LocationDbContext dbContext;

public YourViewComponent (LocationDbContext dbContext)

    this.dbContext = dbContext;


public async Task<IViewComponentResult> InvokeAsync()

 //...


关于详情可以看doc或者这个thread。

编辑:

我认为也可以像这样(示例)在您的视图中注入您的服务。

@inject System.Net.Http.HttpClient httpClient
@inject WebApplication150.Data.WebApplication150Context context

<partial name="Partials/SelectLoc"
     model="new Pages.SelectLocModelModel(httpClient,context)"/>

【讨论】:

以上是关于在 asp.net core razor 页面中使用带有部分视图的 DI [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.Net Core Razor 页面上重定向

ASP .NET Core Razor 页面中的授权

Asp.net core razor pages 加载部分页面

Asp.Net Core Razor 页面中的远程验证

ASP.NET Core Razor 页面与完整 MVC Core [关闭]

Asp .NET Core 2.2 Razor 页面布局和局部