我有一个模型属性:
[HiddenInput(DisplayValue = false)]
public string MyProperty { get; set; }
当我显示属性时,没有显示任何内容:
@Html.Display("MyProperty")
请注意,由于这是用于显示,我不会尝试使用:
@Html.Editor("MyProperty")
如果我使用,则显示值:
@Html.Value("MyProperty")
...但这会绕过DisplayTemplates。
我猜测MVC渲染逻辑有一些东西停止显示上述[HiddenInput]
属性的值,但如果我想明确地这样做,我会使用[ShowForDisplay(false)]
。
有什么想法吗?
答案 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)]。这将自动显示显示的字段并作为标签进行编辑。希望这会有所帮助。