在@ Html.HiddenFor

时间:2016-09-09 07:01:04

标签: asp.net asp.net-mvc

在一个视图中,我有一组映射到List<int>的复选框。

查看:

<input name="foo.IntegerList" type="checkbox" value="1"> 
<input name="foo.IntegerList" type="checkbox" value="2"> 
<input name="foo.IntegerList" type="checkbox" value="3"> 
<input name="foo.IntegerList" type="checkbox" value="4"> 
<input name="foo.IntegerList" type="checkbox" value="5"> 

动作:

[HttpPost]
<public ActionResult DoStuff(Foo foo)
    //do stuff

型号:

public class Foo
{
    IEnumerable<int> IntegerList
}

将此表单帖子提交到DoStuff操作会为其填充List<int>

现在,我必须在另一个视图中使用IntegerList,并将其作为隐藏字段。在另一个视图中,我使用此代码:

@Html.HiddenFor(p => p.IntegerList)

但是这会转换为以下HTML:

<input name="IntegerList" type="hidden" value="">

请注意,未设置该值。如何让Html.HiddenFor生成正确的隐藏字段?

3 个答案:

答案 0 :(得分:1)

你必须迭代它们,把名字加上索引:

@for(int i = 0; i < Model.IntegerList.Count; i++)
    <input name="IntegerList[@i]" type="hidden" value="@Model.IntegerList[i]">
}

使用HiddenFor,就像这样

@for(int i = 0; i < Model.IntegerList.Count; i++)
    @Html.HiddenFor(model => Model.IntegerList[i])
}

答案 1 :(得分:0)

在您的模型中

struct sockaddr *

在您的方法中

public class Foo
{
 public string[] IntegerList{ get; set; }
}

这样的隐藏字段

[HttpPost]
public ActionResult DoStuff(Foo foo)
{
 if (foo.IntegerList!= null)
 string val = String.Join(",", foo.IntegerList);
}
在jquery中

@Html.HiddenFor(p => p.IntegerList , new { @id = "IntegerList"})
<input name="IntegerList" id="IntegerList" type="hidden" value="">

答案 2 :(得分:0)

我知道这很古老,但只想分享对我有用的东西。这是对@adricadar解决方案的修改:

@foreach (var item in Model.MySelections)
{
    <input name="MySelections" type="hidden" value="@item" />
}