【发布时间】:2011-04-21 11:17:39
【问题描述】:
虽然我已经阅读了有关 Html.HiddenFor 的文档,但我还没有掌握它的用途......
有人能解释一下它的用途并举一个简短的例子吗?
这些助手应该在代码中的什么位置?
【问题讨论】:
标签: .net asp.net-mvc asp.net-mvc-2 html-helper html.hiddenfor
虽然我已经阅读了有关 Html.HiddenFor 的文档,但我还没有掌握它的用途......
有人能解释一下它的用途并举一个简短的例子吗?
这些助手应该在代码中的什么位置?
【问题讨论】:
标签: .net asp.net-mvc asp.net-mvc-2 html-helper html.hiddenfor
它会在表单上为您传递的字段(来自您的模型)创建一个隐藏输入。
这对于模型/视图模型中的字段很有用,您需要在页面上保留并在进行另一次调用时传回,但用户不应看到这些字段。
考虑以下 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>
【讨论】:
并在您的 Edit 操作方法中使用隐藏的 ID 输入:
[HttpPost]
public ActionResult Edit(FormCollection collection)
{
ViewModel.ID = Convert.ToInt32(collection["ID"]);
}
【讨论】:
与许多功能一样,这个功能可以以多种不同的方式使用来解决许多不同的问题,我认为它是我们工具带中的又一工具。
到目前为止,讨论主要集中在简单地隐藏 ID 上,但这只是一个值,为什么不将它用于很多值!这就是我正在做的事情,我用它一次只在一个视图中加载一个类中的值,因为 html.beginform 创建了一个新对象,如果该视图的模型对象已经有一些值传递给它,那些除非您在 beginform 中提供对这些值的引用,否则值将会丢失。
要查看 html.hiddenfor 的巨大动力,我建议您查看 Passing data from a View to a Controller in .NET MVC - "@model" not highlighting
【讨论】:
Razor 代码@Html.Hidden 或@Html.HiddenFor 的使用类似于下面的Html 代码
<input type="hidden"/>
也可以参考下面的链接
【讨论】: