隐藏字段为数组

时间:2015-07-27 14:02:34

标签: c# asp.net asp.net-mvc model-binding hidden-field

我有一个有趣的问题,在我的表格中我有这个:

<form class="form-horizontal" role="form" method="post"
      action="@Url.Action("Edit", "Data")">
    @Html.HiddenFor(i => i.Metadata.Name)
    <input name="@Html.NameFor(i => i.RecordKey)" type="hidden" value="@Model.RecordKey" />

我已尝试使用RecordKey字段作为@ Html.HiddenFor,并使用上面的方法,对于这个我得到的值返回为:

string[] { "value" }

它返回一个值数组,而不仅仅是字符串。在模型中,RecordKey被输入为Object,因为在某些情况下它可能是整数,而其他情况则是字符串。知道为什么会这样回复吗?我想也许我有这个名字的双输入,但它不是模型中的任何其他地方......

我将模型定义为:

public class FormModel
{
   public object RecordKey { get; set; }
}

接收它的动作如下。一旦我获得数据,FormModel就有一个数组,我使用以下内容进行转换。

public ActionResult Edit(FormModel model)
{
   if (model.RecordKey is string[])
      model.RecordKey = ((string[])model.RecordKey).First();
}

在客户端,它是您所期望的:

<input name="RecordKey" type="hidden" value="X"></input>

我不太确定为什么它首先这样做......没有自定义模型绑定......

1 个答案:

答案 0 :(得分:1)

这是因为您已将属性声明为typeof object。默认模型绑定器无法知道您是否回发值类型(stringint等)或值集合,因此当它首次初始化模型时,它会创建一个数组以允许所有可能性(并将发布的值添加到该数组)。如果您将房产更改为

public string RecordKey { get; set; }

然后它将被正确绑定为string