- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个解决方案,其中既有 ASP.NET Core 3.1 Web 应用程序项目又有 Razor 客户端库 (RCL) 项目。我正在尝试编写一个 View 组件,该组件将随 Razor 客户端库一起分发,但可以从 ASP.NET Core Web 应用程序中引用。
当我在 Web 应用程序的 _Layout.cshtml
上调用 InvokeAsync()
标记帮助程序时,我可以成功渲染此 ViewComponent
:
@await Component.InvokeAsync("NavBar", new {})
但我想让 RCL 不依赖于 Web 应用程序上提供的字符串名称。相反,我想通过这样的扩展方法调用ViewComponent
:
@{ await Component.RenderMyViewComponentAsync(); }
对我来说,这种方式对使用这个共享 RCL 库的人来说更有利,因为他们不需要指定 ViewComponent
的确切名称,并且可以依靠 IntelliSense 来完成扩展方法。
我创建了一个辅助类,它采用 ViewComponent
对象并在扩展方法中简单地调用其 InvokeAsync()
方法:
public static class PartialHelper
{
public static async Task<IHtmlContent> RenderMyViewComponentAsync(this IViewComponentHelper vcHelper)
{
return await vcHelper.InvokeAsync("NavBar", new { });
}
}
当然,在 NavBarViewComponent.cs
内部,我实现了 InvokeAsync()
方法:
public class NavBarViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View();
}
}
但问题是:我没有看到后一种方法在屏幕上渲染我的 View ,尽管这两种方法仍然会影响我的 NavBarViewComponent.InvokeAsync()
。
据我所知,返回 ViewComponent 的两种方法在功能上是等效的,并且使用相同的方法,除了 @{ wait Component.RenderMyViewComponentAsync(); }
首先执行辅助函数。
我尝试过两种方式调试,但没有成功。我被困住了!
有什么办法可以实现我在这里所要求的吗?如果需要任何澄清,请询问。
最佳答案
扩展方法也有同样的问题,谢谢您的回答。
补充一点 - 不要使用字符串,而是使用泛型在编译时捕获错误:
await Component.InvokeAsync<NavBar>();
或直接从 Controller :
public IActionResult Index()
{
return ViewComponent(typeof(NavBar));
}
关于c# - 从 IViewComponentHelper 扩展方法中调用 Component.InvokeAsync(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60745777/
这个问题在这里已经有了答案: Async/await with/without awaiting (fire and forget) (2 个回答) 9 个月前关闭。 编辑:为了澄清起见,这是在 Bl
请我有错误,这是我的代码。 private void ComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)
我有不同的场景,而不是 this question ,因此另一个问题。 让我们举个例子: void PerformanceCriticalMethod() { Dispatcher.Invok
我想知道将数组传递给 IJSRuntime.InvokeAsync 的最佳方法是什么? . 我偶然发现的问题是 blazor 会将数组的每个元素作为参数传递给 javascript 函数,因为 Inv
在以下方法中,我收到了警告:此异步方法缺少“await”运算符,将同步运行。在此方法中,我可以在哪里使用 await? 注意:此方法返回一个简单的静态 View ,无需与数据库等交互。 public
我有一个解决方案,其中既有 ASP.NET Core 3.1 Web 应用程序项目又有 Razor 客户端库 (RCL) 项目。我正在尝试编写一个 View 组件,该组件将随 Razor 客户端库一起
什么是调用方法? 下面是我的 viewcomponent() 方法。 public IViewComponentResult Invoke() { ViewBag.SelectedCategory
我正在尝试从另一个 Java Lambda 函数中异步调用一个 Java Lambda 函数。我只是想一劳永逸,但是使用 .invokeAsync(InvokeRequest),我必须在 Future
我知道调用StateHasChanged()方法通知组件状态已更改,因此它应该重新渲染。 但是,我也看到了对 await InvokeAsync(StateHasChanged) 的调用。或 awai
如果您有异步方法,如下所示: private async Task DoAsync() { Console.WriteLine(@"(1.1)"); T
我可以访问我的 IHubContext通过构造函数中的 DI 在我的 .NET Core WebAPI Controller 中很好,但我也想在其他地方访问它。 具体来说,当我使用来自 RabbitM
在我的 blazor 服务器端应用程序中,我调用 JSRuntime.InvokeAsync 以在弹出窗口中打开静态内容: await _jsRuntime.InvokeAsync("open", "
我正在尝试解决 SL 性能问题。到目前为止,我有由 InvokeAsync 执行的 WCF 调用。现在,我将其更改为使用 BackgroundWorker。性能大大提高。 什么会导致这种情况? Inv
我已成功将 SignalR.AspNetCore 集成到我的 AbpZero 模板中。一切正常。但是,当我尝试将集线器添加到我的应用程序中时,就像 document 中所述。 ,我在 上收到以下错误
我注意到在 .NET 4.5 中 WPF Dispatcher已经获得了一组新方法来在名为 InvokeAsync 的 Dispatcher 线程上执行内容.之前,.NET 4.5 我们有 Invok
我正在使用 Dotnet Core Blazor 并在删除事件后使用 EventCallBack 绑定(bind)父网格时遇到错误。下面是使用子组件的代码 @foreach (var e
我正在阅读.Net Core 中关于 DI 的 MS 文档。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-
我的应用程序中使用了以下通过 SignalR 连接进行通信的 DTO/POCO 类: class Base { public string Value { get; set; } } cla
我是一名优秀的程序员,十分优秀!