Html.HiddenFor做什么?

JPC*_*PCF 102 .net asp.net-mvc html-helper asp.net-mvc-2 html.hiddenfor

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

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

这些助手应该在哪里进入代码?

Jus*_*ner 110

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

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

考虑以下ViewModel类:

public class ViewModel
{
    public string Value { get; set; }
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在您希望编辑页面存储ID但是看不到它:

<% using(Html.BeginForm() { %>
    <%= Html.HiddenFor(model.Id) %><br />
    <%= Html.TextBoxFor(model.Value) %>
<% } %>
Run Code Online (Sandbox Code Playgroud)

这导致相当于以下HTML:

<form name="form1">
    <input type="hidden" name="Id">2</input>
    <input type="text" name="Value" value="Some Text" />
</form>
Run Code Online (Sandbox Code Playgroud)

  • 我会说用户"看到"了.用户可以"修改"他们想要的任何内容,隐藏或不隐藏. (11认同)

小智 8

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

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

  • 虽然这在技术上是正确的,但如果表单强烈地键入视图模型,则不必执行此操作.您应该能够直接访问模型,这样就无需进行任何转换. (8认同)
  • 我不确定评论是如何不正确的.如果模型在视图中是属性*For()*'d,则控制器方法应该是强类型的,并由ModelBinder自动填充. (2认同)