Html.HiddenFor 做啥?

Posted

技术标签:

【中文标题】Html.HiddenFor 做啥?【英文标题】:What does Html.HiddenFor do?Html.HiddenFor 做什么? 【发布时间】:2011-04-21 11:17:39 【问题描述】:

虽然我已经阅读了有关 html.HiddenFor 的文档,但我还没有掌握它的用途......

有人能解释一下它的用途并举一个简短的例子吗?

这些助手应该在代码中的什么位置?

【问题讨论】:

【参考方案1】:

它会在表单上为您传递的字段(来自您的模型)创建一个隐藏输入。

这对于模型/视图模型中的字段很有用,您需要在页面上保留并在进行另一次调用时传回,但用户不应看到这些字段。

考虑以下 ViewModel 类:

public class ViewModel

    public string Value  get; set; 
    public int Id  get; set; 

现在您希望编辑页面存储 ID 但不显示:

<% using(Html.BeginForm()  %>
    <%= Html.HiddenFor(model.Id) %><br />
    <%= Html.TextBoxFor(model.Value) %>
<%  %>

这会产生与以下 HTML 等效的结果:

<form name="form1">
    <input type="hidden" name="Id">2</input>
    <input type="text" name="Value" value="Some Text" />
</form>

【讨论】:

在他上面的例子中 我会说用户“看到”。用户可以“修改”他们想要的任何东西,无论是否隐藏。 @Craig - 你是对的。我实际上虽然我改变了那个措辞,但显然没有。 而且它通常用于您通常不想显示的 ID(如上例所示)。 我有点困惑,因为视图模型不是控制器的参数。那么为什么会在视图模型的字段上生成输入的名称呢?【参考方案2】:

并在您的 Edit 操作方法中使用隐藏的 ID 输入:

[HttpPost]
public ActionResult Edit(FormCollection collection)

    ViewModel.ID = Convert.ToInt32(collection["ID"]);

【讨论】:

虽然这在技术上是正确的,但如果表单被强类型化到视图模型中,您不应该这样做。您应该能够直接访问模型,从而无需进行任何转换。 @Yetti:不正确。脚手架机制添加 ID 字段是有充分理由的。从我的一个教程中删除它并使用 Fiddler 查看它不在帖子正文中。 我不确定评论是如何不正确的。如果模型是视图中的 For() 属性,则控制器方法应该是强类型的,并由 ModelBinder 自动填充。【参考方案3】:

与许多功能一样,这个功能可以以多种不同的方式使用来解决许多不同的问题,我认为它是我们工具带中的又一工具。

到目前为止,讨论主要集中在简单地隐藏 ID 上,但这只是一个值,为什么不将它用于很多值!这就是我正在做的事情,我用它一次只在一个视图中加载一个类中的值,因为 html.beginform 创建了一个新对象,如果该视图的模型对象已经有一些值传递给它,那些除非您在 beginform 中提供对这些值的引用,否则值将会丢失。

要查看 html.hiddenfor 的巨大动力,我建议您查看 Passing data from a View to a Controller in .NET MVC - "@model" not highlighting

【讨论】:

【参考方案4】:

Razor 代码@Html.Hidden 或@Html.HiddenFor 的使用类似于下面的Html 代码

 <input type="hidden"/>

也可以参考下面的链接

https://msdn.microsoft.com/en-us/library/system.web.mvc.html.inputextensions.hiddenfor(v=vs.118).aspx

【讨论】:

以上是关于Html.HiddenFor 做啥?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net MVC Html.HiddenFor 值错误

@Html.HiddenFor 不适用于 ASP.NET MVC 中的列表

MVC3 Html.HiddenFor(Model => Model.Id) 不传回控制器

使用 Jquery (Razor) 添加 Html 助手

启用对隐藏元素的验证

在元素上设置验证样式