虽然我已经阅读了关于Html.HiddenFor的文档,但我还没有理解它用于...
有人可以解释它的用途并举一个简短的例子吗?
这些帮助者应该在代码中的哪个位置?
答案 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"/>
并参考以下链接