在ASP.NET MVC中扩展HiddenFor模板
我认为Html.HiddenFor
可以使用Html.DisplayFor
或Html.EditorFor
等模板。 不幸的是,该方法不像其他方法那样接受TemplateName
。
我知道,解决方法是使用具有HiddenFors的DisplayFor / EditorFor模板。 但我想了解如何扩展Html.HiddenFor
方法。 任何人?
问候
好像你被错误的比喻误导了。 HiddenFor
完全对应于标记。 就像
TextBoxFor
, CheckBoxFor
等一样。这些方法不是为了使用模板而设计的。 EditorFor
, DisplayFor
/ 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
等同于TextBoxFor
和CheckboxFor
等辅助方法。
你可能也想要一个真正的编辑器,所以把你真正的编辑器放在~/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,但它就像一个魅力。