如何在标签助手进程方法中获取整个视图模型?



是否可以在标记帮助程序进程方法(.NET Core MVC)中获取整个视图模型?

传递给标记帮助程序的所有内容都是通过属性完成的。如果你想要整个视图模型,那么你只需要像这样穹顶:

<mytag model="@Model" />

然后,您需要标记帮助程序上的一个属性来将其绑定到:

public MyViewModel Model { get; set; }

属性的名称对应于属性的名称。这里的"模型"没有什么特别之处。

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

无论何时何方,由于多种原因,传递整个模型并不是一个好主意。标记帮助程序应该有一个特定的用途,并且您应该只传递它特别需要的内容,这也允许您明确这些需求。

如果您正在寻找处理整个模型的东西,则更有可能寻找部分视图或视图组件,而不是标记帮助程序。

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

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

然后,您可以在标记帮助程序中访问它Process或通过以下方式ProcessAsync

For.ModelExplorer.Container.Model

最新更新