在ASP.NET MVC中扩展HiddenFor模板

时间:2013-07-09 10:25:14

标签: c# asp.net-mvc-4 mvc-editor-templates

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

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

此致

3 个答案:

答案 0 :(得分:5)

似乎你被错误的类比误导了。 HiddenFor<input type="hidden"/>标记完全对应。就像TextBoxForCheckBoxFor等一样。这些方法并非设计为使用模板。另一侧的DisplayFor / EditorFor是专门创建的,用于项目中定义的模板。因此,你所要求的是不可能开箱即用的。

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

答案 1 :(得分:1)

有一个重载接受其他参数 - 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

答案 2 :(得分:1)

以下是您的操作,您将其创建为作为编辑器模板,因为Andre pointed outHiddenFor等同于{{1}等辅助方法}和TextBoxFor

您可能也希望拥有一个实际的编辑器,因此请将您的真实编辑器放在CheckboxFor下。我们将把我们隐藏的编辑器#34;在您希望使用它的控制器下。

~/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); 属性的模型。从我们的主要观点来看,我们称之为隐藏编辑器&#34;像这样。

Person

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