У меня есть решение, которое имеет как проект веб-приложения. net core (3.1), так и проект Razor Client Library. Я пытаюсь вернуть компонент представления, который существует в Razor Client Library. Кроме того, у меня есть ссылка на RCL в веб-приложении. Я успешно возвращаю этот ViewComponent, когда я вызываю этот помощник по тегам в веб-приложении _Layout.cshtml
@await Component.InvokeAsync("NavBar", new {})
Это будет работать как есть, но я хочу, чтобы RCL не зависел на имя строки, предоставленной в веб-приложении. Вместо этого я хотел бы вызвать ViewComponent (из _Layout.cshtml
) следующим образом -
@{ await Component.RenderMyViewComponentAsync();}
Для меня этот способ более полезен для тех, кто будет использовать эту общую библиотеку RCL, так как им не нужно указывать точное имя ViewComponent.
Я создал вспомогательный класс, который принимает объект Component и просто вызывает его 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();
}
}
Вот подвох - я не вижу, как мой рендеринг вида на экране из последнего метод, хотя оба способа сделать это все равно ударит мой NavBarViewComponent.InvokeAsync()
.
Из того, что я вижу, оба способа возврата ViewComponents точно такие же, как и go для тех же методов, за исключением того, что @{ await Component.RenderMyViewComponentAsync();}
сначала идет к вспомогательной функции.
I ' я пробовал отлаживать оба пути, но безрезультатно Я застрял!
Есть ли способ добиться того, о чем я здесь прошу? Если требуется какое-либо разъяснение, пожалуйста, не стесняйтесь спрашивать.
Спасибо.