我正在开发一个项目,我希望通过ViewComponents和部分类呈现大部分UI。我希望调用这些ViewComponents的Views不知道它们正在调用的ViewComponent的类型以及ViewComponent需要的数据。这些具体细节是在链上确定的。
我可以通过使用ViewModel传入组件的名称来保持Views不知道ViewComponent类型,如下所示:
@model ShopList.ViewModels.IndexViewModel<Item>
@foreach (var i in Model.Elements)
{
<tr>
<td>
@Component.Invoke(Model.ViewComponentName)
</td>
</tr>
}
这里的事情按预期工作,我笑了。当ViewComponent需要其Invoke()
的任意数据时会出现问题。
如果我使用ViewModel传递数据并在Invoke()
中使用它,那么即使所有ViewComponents都不需要它,也会被强制确认。另外,我可以让ViewComponents收集他们自己的数据,而不是从调用视图中接受一些数据,但这样做很浪费,而且它们的可重用性较低。
有没有一种方法可以将数据传递给ViewComponent而不在View中进行硬编码?或者,也许我走错了路;有更好的方法吗?