2013-07-09 69 views
5

我认为Html.HiddenFor可以使用像Html.DisplayForHtml.EditorFor这样的模板。不幸的是,该方法不像其他人那样接受TemplateName在ASP.NET MVC中扩展隐藏模板

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

问候

回答

5

好像你被错误类比误导。 HiddenFor完全对应于<input type="hidden"/>标记。就像TextBoxFor,CheckBoxFor等。这些方法不是用来使用模板的。另一边的DisplayFor/EditorFor专门用于与项目中定义的模板一起使用。因此,你所要求的是不可能的。

但是,您随时可以使用任何一组参数以及您可能需要的任何逻辑来定义自己的过载HiddenFor

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

1

这里是你做什么,你创建作为一个编辑模板,因为Andre pointed outHiddenFor相当于辅助方法,如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) 

易pe柠檬榨汁。有点哈克,但它像一个魅力。

+0

感谢这个如何,但正如我在我的问题中所说的,我已经知道这是一种可能的解决方法:-) – float

+0

这不适合你@float。这是为了拯救像我这样的下一个Google用户,并且发现这个Q/A是一个荒谬的时间。 – RubberDuck