控制器有时会决定不绑定

时间:2013-10-30 09:06:59

标签: c# asp.net-mvc asp.net-mvc-4

我甚至不确定如何描述这个问题,但肯定是奇怪的。 因此,控制器操作有时会决定不识别特定的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;”)

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

大部分时间都可以正常使用。控制器通常会识别/绑定ProductSpec。

以下是该观点的相关部分。

<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的IEnumebrable,有时候是null。

我无法弄清楚一个模式,为什么会发生这种情况? 任何方向都会受到赞赏。

编辑:

更多信息:

Request.Form.AllKeys实际上包含相关的键,所有这些键。具有所有属性等的规格[0]和规格[1]。

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

干杯, 吨。

1 个答案:

答案 0 :(得分:0)

您是否检查过ModelState以查看是否有错误?

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

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

或者如果第一个不是零:

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

然后绑定将失败。

除此之外,(复制我在下面发布的评论),如果请求发送的内容似乎是有效数据总是但只绑定有时,问题是它是否失败或是否一致地使用相同的数据。

一件好事是使用Fiddler来捕获成功绑定或无法绑定的Post,然后您可以将该请求复制到它的Request Builder(请参阅'撰写HTTP请求'{ {3}})并调整帖子内容,直到你可以开始工作。在这样做的过程中,您应该追查问题。这将是数据的问题,恕我直言。