我甚至不确定如何描述这个问题,但肯定是奇怪的。 因此,控制器操作有时会决定不识别特定的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
实际上是空的。
干杯, 吨。
答案 0 :(得分:0)
您是否检查过ModelState
以查看是否有错误?
另外 - 检查传入请求中所有对象的整数id是否连续。如果值如下:
specs[0].Name
specs[2].Name
或者如果第一个不是零:
specs[1].Name
specs[2].Name
然后绑定将失败。
除此之外,(复制我在下面发布的评论),如果请求发送的内容似乎是有效数据总是但只绑定有时,问题是它是否失败或是否一致地使用相同的数据。
一件好事是使用Fiddler来捕获成功绑定或无法绑定的Post,然后您可以将该请求复制到它的Request Builder(请参阅'撰写HTTP请求'{ {3}})并调整帖子内容,直到你可以开始工作。在这样做的过程中,您应该追查问题。这将是数据的问题,恕我直言。