Вам следует создать отдельный метод действия, который возвращает HTML-разметку, необходимую для визуализации раздела корзины на вашей странице, и включать его во все ваши представления, используя метод Html.Action.
Вы также можете украсить этот метод действияChildActionOnly
атрибут, чтобы пользователи не могли напрямую получить доступ к этому методу действия, запрашивая URL /ShoppingCart/Cart
.
[ChildActionOnly]
public ActionResult Cart()
{
ViewBag.ItemCount = 2; // replace hard coded value with your actual value
return PartialView();
}
, а в вашем частичном представлении (~/Views/Shared/Cart.cshtml
) вы можете написать необходимый HTML-коддля сегмента корзины страницы.
<span class="mycart">
Total items in cart @ViewBag.ItemCount
</span>
Здесь мы используем ViewBag для передачи числового значения количества элементов из метода действия в его частичное представление.Но вы можете использовать модель представления и использовать строго типизированный подход представления для передачи данных из вашего метода действия в частичное представление (это мой предпочтительный подход).
Теперь в другом файле представлений / файла макета, где вы хотитедля рендеринга HTML корзины, вы можете вызвать метод Html.Action
<div>
@Html.Action("Cart","ShoppingCart")
</div>
<h1>Welcome to my site</h1>
Когда бритва выполнит ваше представление, он увидит этот метод Html.Action, который будет выполнен и выведет его (разметка HTML).сгенерированный для метода действия), будет включен в окончательный вывод, сгенерированный для текущего представления.
Я использую метод PartialView
, чтобы он не пытался выполнить код макета.(Люди совершают эту ошибку и получают бесконечные вызовы к методу действий корзины.
Для основных проектов Asp.Net
Если вы хотите сделать то же самое в aspОсновные проекты .net, вы можете использовать компоненты View для достижения тех же результатов.
Создайте компонент вида для визуализации корзины.
public class CartViewComponent : ViewComponent
{
public IViewComponentResult Invoke(string name)
{
var totalItemCount = 3;
return View(totalItemCount);
}
}
Создайте бритвенное представление для этого компонента вида с помощьюимя Default.cshtml
внутри ~/Views/Shared/Components/Cart
каталога, и вы можете иметь свой бритвенный код / разметку HTML внутри него для рендеринга желаемого HTML.В этом примере я использую строго типизированный подход, где мое представление строго типизировано до типа int
иЯ передаю значение типа int из метода Invoke
при вызове метода View
.
@model int
<span>
Total items : @Model
</span>
Теперь вы можете вызывать этот компонент представления в других файлах представлений / макетов, вызывая метод Component.InvokeAsync
.
<div>
@await Component.InvokeAsync("Cart")
</div>
<h1>Welcome to my site</h1>