Asp.net核心View组件模型绑定

时间:2016-04-14 11:45:53

标签: c# asp.net-core-mvc

我正在寻找一种在View组件中调用Model binder的方法。我更喜欢使用asp.net核心的内置功能,但这只能在控制器内部使用,而不是View Components本身。有什么方法可以解决这个问题吗?

4 个答案:

答案 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可以很好地解决模型绑定需求。

Startup.cs

services.AddSingleton<List<Notification>>();

NotificationComponent.cshtml

@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>