0

注意到一个问题,当我将模型传递给视图时,int[] 类型的属性之一转换为

<input type="hidden" value="System.Int32[]" name="test">

我希望在 value 属性中看到数组的字符串化值。我尝试使用列表。结果是:

<input type="hidden" value="System.Collections.Generic.List`1[System.Int32]" 
       name="test">

我有相当复杂的模型,它依赖于其他类,这就是为什么我不想将它更改为字符串格式。不能使用 int[] 吗?

4

4 回答 4

1

假设您需要通过 POST 将值接收回另一个操作方法,您必须在创建 HTML 的视图中编写自己的代码(列表中的每个项目都有一个隐藏字段):

<input type="hidden" value="123" name="test[0]">
<input type="hidden" value="345" name="test[1]">

阅读此内容以获取更多信息:http ://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

于 2013-05-29T13:54:14.707 回答
1

在视图中,您可能需要执行以下操作:

@Html.HiddenFor(x => x.Array, new { value = String.Join(",", Model.Array) })
于 2013-05-29T13:54:54.813 回答
0

@Html.HiddenFor接受一个对象作为值。您看到的是object.ToString(),对于 Int32 数组,它是类型的名称:“System.Int32[]”。

如果您想简单地将数组的 csv 版本存储在隐藏字段中,您可以尝试以下操作:

@Html.Hidden("test", string.Join(",", values))
于 2013-05-29T13:55:05.390 回答
0

你得到的.ToString()类型的值对于更复杂的类型是类型名称。

您能否以不同的方式公开您的集合属性。IE

public int [] MyIntegers
{
   ...
}

public string MyIntegersStringified
{
    get {

       return string.Join(",", MyIntegers);
    }
}
于 2013-05-29T13:54:07.193 回答