Html.HiddenFor做什么?

时间:2010-10-05 18:43:22

标签: .net asp.net-mvc asp.net-mvc-2 html-helper

虽然我已经阅读了关于Html.HiddenFor的文档,但我还没有理解它用于...

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

这些帮助者应该在代码中的哪个位置?

4 个答案:

答案 0 :(得分:110)

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

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

考虑以下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>

答案 1 :(得分:8)

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

[HttpPost]
public ActionResult Edit(FormCollection collection)
{
    ViewModel.ID = Convert.ToInt32(collection["ID"]);
}

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

使用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