【问题标题】:Binding to a Collection of Strongly-Typed Objects in ASP.NET MVC在 ASP.NET MVC 中绑定到强类型对象的集合
【发布时间】:2010-11-01 07:15:15
【问题描述】:

我有一个包含多个字段的数据类:

public class Person
{
    public int id { get; set }
    public string Name { get; set; }
    public double Rate { get; set; }
    public int Type { get; set; }
}

如果我理解Scott Hanselman's take on binding arrays of objects,我应该能够创建一个呈现如下 HTML 的表单视图:

<input name="Person[0].id" value="26" type="hidden" />
<input name="Person[0].Name" value="Tom Smith" type="text" />
<input name="Person[0].Rate" value="40.0" type="text" />
<select name="Person[0].Type">
    <option selected="selected" value="1">Full Time</option>
    <option value="2">Part Time</option>
</select>

<input name="Person[1].id" value="33" type="hidden" />
<input name="Person[1].Name" value="Fred Jones" type="text" />
<input name="Person[1].Rate" value="45.0" type="text" />
<select name="Person[1].Type">
    <option value="1">Full Time</option>
    <option selected="selected" value="2">Part Time</option>
</select>

然后我应该能够使用如下所示的操作方法在我的控制器中捕获这些数据:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult People(Person[] array)
{
    // Do stuff with array
}

但它不起作用。数组变量始终为空。我将此解释为数据绑定不起作用。但为什么呢?

【问题讨论】:

  • 可能会尝试使用通用列表而不是数组。
  • Tried List 而不是 Person[],仍然返回 null。 Hanselman 模式需要 Person[]。
  • 您是否调试和分析过您的 POST 数据,以验证数据是否按照 Scott 的文章发布?
  • 尚未,但数据将成功填充 FormsCollection 变量。我可以解析它,但我会完全绕过绑定系统。
  • 表单标记是什么样的?

标签: c# asp.net-mvc


【解决方案1】:
<input name="Person[0].Rate" value="40.0" type="text" />

应该是:

<input name="array[0].Rate" value="40.0" type="text" />

【讨论】:

    【解决方案2】:

    您的字段应命名为 array[0].id, array[0].Type, ...

    它们应该是数组实例的名称,而不是数组中的类型名称。

    或者,您可以将动作控制器的签名更改为: 人[]人

    你明白了:-)

    【讨论】:

    • 我花了大约 10 秒的时间查看您发布的链接。这是我们都知道和讨厌的盲点之一。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多