我正在寻找一种在View组件中调用Model binder的方法。我更喜欢使用asp.net核心的内置功能,但这只能在控制器内部使用,而不是View Components本身。有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
据我所知,这是不可能的。在调用控制器操作之前,模型绑定在框架的生命周期中进一步发生。
我真的很想看到一些代码,为什么你需要这样做,看看是否有任何其他潜在的解决方案不涉及模型绑定。
答案 1 :(得分:3)
根据View Components文件:
View Components不使用模型绑定,只依赖于调用时提供的数据。
但是,您可以将模型作为对象/参数传递给ViewComponent:
@await Component.InvokeAsync("PriorityList", MyModel)
或
@await Component.InvokeAsync("PriorityList", new { maxPriority = 2, isDone = false })
你想要达到什么目标?
答案 2 :(得分:0)
您甚至可以使用TagHelper
<vc:my-component model="@(Model)"></vc:my-component>
并在您的ViewComponent内部
public async Task<IViewComponentResult> InvokeAsync(MyModel model)
这不在官方指南中
答案 3 :(得分:0)
我在项目中通过使用ASP.NET Core的依赖项注入将我的单身人士直接插入到Razor视图中来解决了这个问题。
下面的代码段使用SignalR JavaScript库将通知发送给浏览器,如果他们在观看屏幕时遇到了问题。但是,当页面首次加载时,我想在CSS“钟形”图像中显示通知计数,以便从Startup.cs
中注册的“单个”对象获取计数。我在后端代码中使用List<Notification>
对象,将新的通知添加到单个实例对象,并将信号发送到浏览器。在这种情况下,DI可以很好地解决模型绑定需求。
services.AddSingleton<List<Notification>>();
@using PWVault.Service.Notification //optional as you can specify the full namespace instead below
@inject List<Notification> Notifications //this is my registered Singleton from Startup.cs
<link rel="stylesheet" href="~/css/NotificationBadge.css" />
<div class="notificationContainer">
<div class="notification" data-toggle="modal" data-target="#notificationModal">
</div>
<label hidden="hidden" id="notificationCount">@Notifications.Count</label>
</div>
@*modal window*@
@await Html.PartialAsync("_NotificationDetailModal")
<script src="~/lib/signalr/dist/browser/signalr.js"></script>
<script src="~/js/NotificationHub.js"></script>