为什么 @Html.Action @Html.RenderAction 在 MVC .Net 8 项目中不起作用?如何将数据从我选择的控制器和操作传递到部分视图?

问题描述 投票:0回答:1

我正在尝试使用

\_Layout.cshtml
中卡控制器的数据渲染部分视图。问题是只有
@Html.Partial
有效。我对自己说:“好吧,我会尝试使用 ViewBag 或 ViewDate 甚至动态模型传递必要的数据”,但这也不起作用。它只渲染视图,但其中没有数据。调试时甚至不会进入控制器功能。

侧边栏.cshtml:

<a href="javascript:void(0)">&times;</a>
@if (ViewBag.Cards != null)
{
    @foreach (var card in ViewBag.Cards)
    {
        <a>@card.Number</a>
    }
}
else
{
    <p>No cards available.</p>
}

_Layout.cshtml:

@Html.Partial("SideBar")

卡控制器:

var user = await userManager.GetUserAsync(User);
var cards = await cardService.GetAllCardsAsync(user.Id);

cards = cards.Select(c => new CardViewModel
{
    Id = c.Id,
    Balance = c.Balance,
    Number = c.Number,
    Transactions = c.Transactions
});

ViewBag.Cards = cards;
return PartialView("Sidebar",cards);`
c# asp.net-mvc .net-8.0
1个回答
0
投票

“@Html.Action”适用于旧的.net框架。在.net8(asp.net core)中,您可以尝试使用ViewComponent。尝试以下操作:

  1. 创建一个班级
    MyPagesViewComponent.cs
    public class MyPagesViewComponent: ViewComponent
    {
        public IViewComponentResult Invoke()
        {
            string model = "test passing value";  //of course you can pass your object 

            return View("childPage1",model);
        }
    }
  1. 创建文件夹和“childPage1.cshtml”,如下层次结构

    childPage1.cshtml
@model string    //pass model type

@Model      // display model value
  1. 在_Layout.cshtml中将以下代码添加到某处
...
  @await Component.InvokeAsync("MyPages")
...

结果

© www.soinside.com 2019 - 2024. All rights reserved.