隐藏字段作为数组
本文关键字:数组 字段 隐藏 | 更新日期: 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