我有一个有趣的问题,在我的表格中我有这个:
<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>
我不太确定为什么它首先这样做......没有自定义模型绑定......
答案 0 :(得分:1)
这是因为您已将属性声明为typeof object
。默认模型绑定器无法知道您是否回发值类型(string
,int
等)或值集合,因此当它首次初始化模型时,它会创建一个数组以允许所有可能性(并将发布的值添加到该数组)。如果您将房产更改为
public string RecordKey { get; set; }
然后它将被正确绑定为string