如何在 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。虽然这将允许您处理任何场景,但原则上,您将被迫在标签助手中使用长块的 switch
或 if
语句来有条件地处理不同的场景。
总而言之,出于多种原因,通过整个模型并不是一个好主意。标签助手应该有一个特定的目的,你应该只传递它特别需要的东西,这也可以让你明确这些需求。
如果您正在寻找处理整个模型的东西,您更有可能寻找局部视图或视图组件,而不是标签助手。
如果您首先将 for
元素绑定为 :
,则视图模型实际上可用
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
然后您可以在标签助手 Process
或 ProcessAsync
中通过以下方式访问它:
For.ModelExplorer.Container.Model
是否可以在标签助手 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。虽然这将允许您处理任何场景,但原则上,您将被迫在标签助手中使用长块的 switch
或 if
语句来有条件地处理不同的场景。
总而言之,出于多种原因,通过整个模型并不是一个好主意。标签助手应该有一个特定的目的,你应该只传递它特别需要的东西,这也可以让你明确这些需求。
如果您正在寻找处理整个模型的东西,您更有可能寻找局部视图或视图组件,而不是标签助手。
如果您首先将 for
元素绑定为 :
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
然后您可以在标签助手 Process
或 ProcessAsync
中通过以下方式访问它:
For.ModelExplorer.Container.Model