在ASP.NET MVC中扩展HiddenFor模板

我认为Html.HiddenFor可以使用Html.DisplayForHtml.EditorFor等模板。 不幸的是,该方法不像其他方法那样接受TemplateName

我知道,解决方法是使用具有HiddenFors的DisplayFor / EditorFor模板。 但我想了解如何扩展Html.HiddenFor方法。 任何人?

问候

好像你被错误的比喻误导了。 HiddenFor完全对应于标记。 就像TextBoxForCheckBoxFor等一样。这些方法不是为了使用模板而设计的。 EditorForDisplayFor / EditorFor专门用于与项目中定义的模板一起使用。 因此,你所要求的是不可能开箱即用的。

但是,您始终可以使用任何参数集和您可能需要的逻辑为HiddenFor定义自己的重载。

有一个重载接受附加参数htmlAttributes 。 您可以使用它为结果标记添加一些属性。

另外第二种方法是在其中一个文件夹中创建剃刀局部视图

 ~/Areas/AreaName/Views/ControllerName/DisplayTemplates/TemplateName.cshtml ~/Areas/AreaName/Views/Shared/DisplayTemplates/TemplateName.cshtml ~/Views/ControllerName/DisplayTemplates/TemplateName.cshtml ~/Views/Shared/DisplayTemplates/TemplateName.cshtml 

名称为HiddenInput.cshtml

这是你做的,你创建它作为编辑器模板 ,因为正如安德烈所指出的 , HiddenFor等同于TextBoxForCheckboxFor等辅助方法。

你可能也想要一个真正的编辑器,所以把你真正的编辑器放在~/Shared/EditorTemplates 。 我们将把我们的“隐藏编辑器”放在你想要使用它的控制器下面。

 ~/Views/ControllerName/EditorTemplates/ModelName.cshtml 

让我们说我们有一个Person模型。

 public class Person { public string First { get; set; } public string Last { get; set; } } 

我们将创建一个局部视图。

 @Model Person @Html.HiddenFor(p => p.First); @Html.HiddenFor(p => p.Last); 

然后我们假装我们有一个包含Person作为属性的模型。 从我们的主视图来看,我们称之为“隐藏编辑器”。

 @Model Foo @Html.EditorFor(f => f.Person) 

容易腻的柠檬挤。 有点hacky,但它就像一个魅力。