0

我什至不知道如何描述这个问题,但这肯定很奇怪。因此,控制器操作有时决定不识别特定的 IEnumerable 对象。

假设这是我正在谈论的动作:

public ActionResult Edit(Product model, IEnumerable<ProductSpec> specs)

很简单吧?

这是一个 ProductSpec 类..

private class ProductSpec
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Value { get; set; }
            public bool Whatever { get; set; }
            public int ProductId { get; set; }
}

我设法弄清楚的是...

假设视图中有 2 个 ProductSpecs,而用户决定删除一个。然后发生的是具有该 ProductSpec 的行变得不可见 (style="display:none;")

我知道这不是这样做的首选方式,但这是有原因的。

这在大多数情况下都可以正常工作。控制器通常识别/绑定 ProductSpecs。

这是视图的相关部分。

<div id="row1">
<input type="hidden" name="specs[0].Id" value="88888">
<input type="hidden" name="specs[0].Name" value="foo name">
<input type="hidden" name="specs[0].Value" value="foo value">
<input type="hidden" name="specs[0].Whatever" value="True">
<input type="hidden" name="specs[0].ProductId" value="1234">
</div>

<div id="row2" style="display:none;">
<input type="hidden" name="specs[1].Id" value="99999">
<input type="hidden" name="specs[1].Name" value="foo name">
<input type="hidden" name="specs[1].Value" value="foo value">
<input type="hidden" name="specs[1].Whatever" value="False">
<input type="hidden" name="specs[1].ProductId" value="1234">
</div>

因此,IEnumerable 有时是具有 2 个 productSpecs 的 IEnumerable,有时是 null。

我无法弄清楚模式,为什么会发生这种情况?任何类型的方向将不胜感激。

编辑:

更多信息:

Request.Form.AllKeys实际上包含所有相关的键。specs[0] 和 specs[1] 都具有所有属性等。

IEnumerable<ProductSpec> specs实际上是空的。

干杯,T。

4

1 回答 1

0

你检查ModelState过是否有错误吗?

另外 - 检查所有对象的整数 id 在传入请求中是否连续。如果值是这样的:

specs[0].Name
specs[2].Name

或者如果第一个不为零:

specs[1].Name
specs[2].Name

然后绑定将失败。

除此之外,(复制我在下面发布的评论),如果请求总是发送看似有效的数据,但有时只是绑定,那么问题是它是失败还是成功地使用相同的数据。

一件好事是使用Fiddler来捕获成功绑定或绑定失败的 Post,然后您可以将该请求复制到它的 Request Builder(请参阅此处的“撰写 HTTP(s) 请求” )并调整帖子内容,直到你可以让它工作。在这样做的过程中,您应该追踪问题。恕我直言,这将是数据的问题。

于 2013-10-30T09:27:48.917 回答