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

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

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

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

【问题讨论】:

    标签: .net asp.net-mvc asp.net-mvc-2 html-helper 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

      【讨论】:

        猜你喜欢
        • 2020-11-21
        • 2011-05-21
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        • 2012-08-28
        相关资源
        最近更新 更多