Asp.net core 如何在taghelper过程方法中获取整个viewmodel?

Asp.net core 如何在taghelper过程方法中获取整个viewmodel?,asp.net-core,tag-helpers,asp.net-core-tag-helpers,Asp.net Core,Tag Helpers,Asp.net Core Tag Helpers,是否有可能在标记辅助进程方法(.NET Core MVC)中获得整个视图模型?传递给标记辅助进程的所有操作都是通过属性完成的。如果您想要整个视图模型,那么您只需要这样做: <mytag model="@Model" /> 属性的名称对应于属性的名称。这里的“模特”没什么特别的 然而,它的效用将是有限的。标记帮助程序的目的是使其具有某种通用性。这就是重点:封装可重用逻辑。如果将其绑定到特定的视图模型类(基于属性),则它将仅适用于该特定视图模型。使其更通用的唯一方法是使用基类,或者直接

是否有可能在标记辅助进程方法(.NET Core MVC)中获得整个视图模型?

传递给标记辅助进程的所有操作都是通过属性完成的。如果您想要整个视图模型,那么您只需要这样做:

<mytag model="@Model" />
属性的名称对应于属性的名称。这里的“模特”没什么特别的

然而,它的效用将是有限的。标记帮助程序的目的是使其具有某种通用性。这就是重点:封装可重用逻辑。如果将其绑定到特定的视图模型类(基于属性),则它将仅适用于该特定视图模型。使其更通用的唯一方法是使用基类,或者直接将其键入为
对象
,以便可以传递任何内容。但是,对于基类,1)您需要让每个视图模型继承自该基类,2)即使这样,您也只能在基类上使用属性。使用
对象
,除非首先将其向下转换到特定的视图模型类,否则实际上无法引用任何属性。虽然这将允许您处理任何场景,但原则上,您将被迫在标记帮助器中使用长块的
switch
if
语句来有条件地处理不同的场景

长话短说,通过整个模型不是一个好主意,原因很多。标记帮助器应该有一个特定的用途,您应该只传递它特别需要的东西,这也允许您明确这些需要


如果您要查找处理整个模型的内容,则更可能要查找局部视图或视图组件,而不是标记辅助对象。

如果首先将
for
元素绑定为:

[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
然后,您可以通过以下方式在标记助手
进程
进程异步
中访问它:

.modeleExplorer.Container.Model的

[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }