如何在 taghelper 过程方法中获取整个视图模型?

How to get whole viewmodel in taghelper process method?

是否可以在标签助手 Process 方法(.NET Core MVC)中获取整个视图模型?

传递给标签助手的一切 都是通过属性完成的。如果你想要整个视图模型,那么你只需这样做:

<mytag model="@Model" />

然后你需要在标签助手上添加一个 属性 来将其绑定到 like:

public MyViewModel Model { get; set; }

属性名称对应属性的名称。这里"model"没什么特别的。

但是,它的实用性将受到限制。标签助手旨在有点通用。这就是重点:封装可重用的逻辑。如果您将它绑定到特定的视图模型 class(基于 属性),那么它将 与该特定的视图模型一起工作。使它更通用的唯一方法是使用基数 class 或按字面意思将其键入 object,以便可以传递 anything。但是,对于基础 class,1) 您需要让每个视图模型都从该基础 class 继承,并且 2) 即使那样,您也只能使用基础 [=35] 上的属性=].使用 object,您将无法真正引用任何属性,除非您先将其向下转换为特定的视图模型 class。虽然这将允许您处理任何场景,但原则上,您将被迫在标签助手中使用长块的 switchif 语句来有条件地处理不同的场景。

总而言之,出于多种原因,通过整个模型并不是一个好主意。标签助手应该有一个特定的目的,你应该只传递它特别需要的东西,这也可以让你明确这些需求。

如果您正在寻找处理整个模型的东西,您更有可能寻找局部视图或视图组件,而不是标签助手。

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

,则视图模型实际上可用
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }

然后您可以在标签助手 ProcessProcessAsync 中通过以下方式访问它:

For.ModelExplorer.Container.Model