1

我还是 Razor 页面和视图组件的新手,但我已经在 ASP.NET 中遇到过几次。

我不确定为什么我的视图组件没有填充其模型。我注意到我做错的一件事是将路由参数放在顶部。例如,

@page "{handler?}"

我知道(至少现在)视图组件不打算作为端点直接路由到,但现在我很好奇使用@page带有路由属性的 a 可以防止模型绑定发生什么?我只是通过试验/错误发现删除它可以让我的模型填充到视图组件中。

这是代码

视图组件

public class TestViewComponent : ViewComponent
{

    public async Task<IViewComponentResult> InvokeAsync(Data.CustomerListModel cust)
    {
        List<Data.CustomerListModel> clist = new List<Data.CustomerListModel>();
        clist.Add(new Data.CustomerListModel() { Customer = "fred" });
        clist.Add(new Data.CustomerListModel() { Customer = "wilma" });

        var dlist = clist.AsEnumerable();

        return View(dlist);
    }
}

ViewComponent 的视图,Default.html

@page "{handler?}"
@using System.Collections.Generic
@addTagHelper *, TelerikAspnetCoreApp1
@model IEnumerable<Data.CustomerListModel>

<h1>Default</h1>

<h3>Machine name @Environment.MachineName</h3>
<ul>
    @foreach (Data.CustomerListModel c in Model)
    {
        <li>@c.Customer</li>
    }
</ul>

客户列表模型

namespace TelerikAspNetCoreApp1.Data
{
    public class CustomerListModel
    {
        public string Customer { get; set; }
    }
}

父视图,Index.cshtml

<div>
    @await Component.InvokeAsync("Test",new { Name = "tester123" })
</div>
4

2 回答 2

0

ViewComponent 的视图看起来很像在带有控制器和视图的 ASP.NET Core 应用程序中使用的 Razor 视图文件。然后@page在 Razor 页面中使用指令并将文件转换为 MVC 操作 - 这意味着它直接处理请求,而不通过控制器。@page影响其他 Razor 构造的行为。

您可以抽出时间阅读 View Component 和 Razor Pages 上的 MS 文档:

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-3.0

https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-3.0&tabs=visual-studio

于 2019-11-07T02:46:53.747 回答
0

不要@page在要执行的页面中使用,return View(<page_name>, <model>)Model属性将不再为空。

于 2021-11-08T14:39:02.600 回答