В нашем новом проекте мы используем View Compoments в нашем существующем приложении MVC для отдельных и повторно используемых компонентов. В последнее время Blazor сделал несколько серьезных шагов вперед. Мы поняли, что гораздо удобнее использовать компоненты Blazor для подобных асинхронных задач. Например, добавление товара в корзину:
Просмотр компонента (старый подход):
В компоненте просмотра нам нужно сделать AJAX - POST, чтобы добавить позицию, а затем перезагрузить компонент просмотра корзины через запрос AJAX - GET.
компонент бритвы (новый подход)
официальные документы: https://docs.microsoft.com/en-us/aspnet/core/blazor/integrate-components?view=aspnetcore-3.1
В Компонент Razor. Мы просто вызываем базовый метод @code, чтобы добавить позицию, и можем вызвать событие, которое повторно отображает компонент представления корзины. Таким образом, мы можем go без JavaScript вообще. Ниже рабочий пример в моем приложении MVC:
ProductList.razor
ProductList.razor.cs
Разделенный код, но работает так же, как когда я помещаю его в "@Code ()" на моем компоненте бритвы (наследует vom ComponentBase)
public partial class ProductList : ComponentBase
{
[Inject] Business.Cart cart { get; set; }
[Inject] Business.Product product { get; set; }
protected List<ListProduct> products = new List<ListProduct>();
protected override async Task OnInitializedAsync()
{
List<ListProduct> temp = await product.GetProductList(new GetProductListRequest { CategoryURL = UrlDesc });
products = temp;
}
protected async Task addposition(int artid)
{
CartAddPositionResponse resp = await cart.AddPosition(new CartAddPositionRequest { ProductID = artid });
cart.CallRequestRefresh();
}
}
Catalog.cs html (MVC View)
<component type="typeof(ProductList)" render-mode="ServerPrerendered" param-urlDesc="@Model.urlDesc"/>
Это приводит к следующему вопросу:
Есть ли какие-либо причины использовать View Components вообще, если я просто могу использовать компоненты Blazor, которые обеспечивают преимущество прямого вызова асинхронных методов и могут быть повторно использованы? несколько раз где-нибудь в проекте? Есть ли и недостатки?