【问题标题】:Hidden Field As Array隐藏字段作为数组
【发布时间】:2015-07-27 14:02:33
【问题描述】:

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

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

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

【问题讨论】:

  • 你是如何得到这个“返回值”的?怎么装订和阅读?
  • 显示您的控制器操作和自定义模型绑定器(如果有)。
  • 已添加。没有自定义模型绑定。
  • 你传递给视图什么值?隐藏输入的值在 HTML 中是什么样的?
  • 抱歉,因为我的格式错误所以没有显示,但它显示如上。值是 X,它被发送并正确返回,但在一个数组中。名称匹配正确...

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


【解决方案1】:

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

public string RecordKey { get; set; }

那么它将被正确绑定为string

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2013-09-03
    • 2014-01-13
    相关资源
    最近更新 更多