MVC中[HiddenInput]未显示的值

时间:2012-12-19 12:33:33

标签: asp.net-mvc

我有一个模型属性:

[HiddenInput(DisplayValue = false)]
public string MyProperty { get; set; }

当我显示属性时,没有显示任何内容:

@Html.Display("MyProperty")

请注意,由于这是用于显示,我不会尝试使用:

@Html.Editor("MyProperty")

如果我使用,则显示值:

@Html.Value("MyProperty")

...但这会绕过DisplayTemplates。

我猜测MVC渲染逻辑有一些东西停止显示上述[HiddenInput]属性的值,但如果我想明确地这样做,我会使用[ShowForDisplay(false)]

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

Display函数“返回对象中由字符串表达式表示的每个属性的HTML标记”(参见http://msdn.microsoft.com/en-us/library/ee310174(v=vs.98).aspx)。

这意味着如果你的字段是一个隐藏的字段,它确实会吐出标记,但由于标记是隐藏字段的标记,你不会直接在页面上看到任何内容。你会得到<input type="hidden" value="your value" />的内容。如果你查看页面代码,你会看到标记就在那里。

如果您只想在页面上显示一个值,则可以执行@Model.Property。如果要将值输入控件,可以调用许多基于@Html的控件中的任意一个,并输入Model.Property作为默认值。

就个人而言,我不喜欢定义页面在模型中的外观。对我来说,值本身应该由模型管理,但它的显示方式应该留给你的视图本身。


我知道您正在使用显示器而不是输入视图。尽管如此,HiddenInput属性只是声明当为该字段呈现编辑器时(例如使用@Html.EditorFor()),它应该是隐藏的输入HTML元素。如果您没有尝试渲染编辑器,那么此属性与结果无关,您只需执行@Model.Property即可在屏幕上渲染元素,如前所述。

答案 1 :(得分:0)

您可以尝试[HiddenInput]而不是[HiddenInput(DisplayValue = false)]。这将自动显示显示的字段并作为标签进行编辑。希望这会有所帮助。