5

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

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

问候

4

3 回答 3

5

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

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

于 2013-07-09T10:31:21.040 回答
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

于 2013-07-09T10:31:08.463 回答
1

这就是您所做的,您将其创建为编辑器模板,因为正如Andre 指出的那样,它等同于andHiddenFor之类的辅助方法。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);

然后我们假设我们有一个包含 aPerson作为属性的模型。从我们的主要观点来看,我们这样称呼我们的“隐藏编辑器”。

@Model Foo

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

易榨柠檬汁。有点hacky,但它就像一个魅力。

于 2016-02-06T01:06:05.240 回答