隐藏字段作为数组

本文关键字:数组 字段 隐藏 | 更新日期: 2023-09-27 18:04:48

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

<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>

我不太确定为什么它会这样做…没有自定义模型绑定…

隐藏字段作为数组

出现这种情况是因为您已将属性声明为typeof object。默认的模型绑定器没有办法知道你是发布一个值类型(string, int等)还是一个值集合,所以当它第一次初始化你的模型时,它会创建一个数组来允许所有的可能性(并将发布的值添加到该数组)。如果您将属性更改为

public string RecordKey { get; set; }

那么它将被正确地绑定为string