我有一个ASP.NET MVC应用程序。在某一点上,我在Controller方法中获得了一个FormCollection,我希望使用它来更新模型。在集合中,并非所有的值都是该模型的属性,要更新的属性是列表中的项,该列表也是来自另一个列表的项。像这样的事情(我希望这是明确的):
propertyToUpdate --> model.Items[0].Subitems[0].SomePropertyClass.Value;我在我的主计长身上试过这个:
UpdateModel(model);问题是,这是行不通的,我认为这与反射不起作用有关。我搜索了一下,偶然发现了这篇文章。所以我知道使用前缀参数可以解决这个问题。但在我的例子中却不是这样,因为属性作为列表中的项在模型中“更深”地存在。
有人知道我怎么能解决这个问题吗?
更新:
下面是该属性的EditorTemplate:
@model Q95.Domain.Property
<li>
@Html.DisplayFor(p => p.Description) :
@Html.DisplayFor(p => p.Quantity.Value)
@Html.DisplayFor(p => p.Quantity.Unit.Description)
<br />
@Html.TextBoxFor(p => p.Quantity.Value)
</li>此模板称为如下所示:
<ul>
@Html.EditorFor(model => model.SegmentRequirement.MaterialRequirements[j].Properties)
</ul>这是足够的代码还是还缺少什么?
Update2:
好的,在所有的子属性中,我定义了无参数构造函数,现在我调用:
UpdateModel(segmentRequirement, "SegmentRequirement", form.ToValueProvider());这将更新模型,但是MaterialRequirements中的所有内容都是重新实例化的.:S
发布于 2011-12-06 12:24:50
UpdateModel在“深度属性”上工作得很好。
问题可能是您获得的集合中的数据不等于属性名称。
检查3处,查看从页面中得到的值。
严格按照这个顺序。
键应该匹配建模属性名称的。
更新:
如何匹配属性名称的密钥?
输入id将是您获得的键,更改id以匹配您的属性名称,或者更好地使用HtmlTextBoxFor助手:参见这文章:
发布于 2011-12-06 10:25:06
也许您应该创建扁平的ViewModel,然后使用它填充视图,然后将其与实际模型同步。
发布于 2011-12-06 11:11:50
您能向我们展示您的模型和视图吗?如果您没有使用htmlhelper,那么您必须非常好地理解命名约定,以便使模型绑定与您的模型一起工作。所以第一件事是向我们展示你的模型和观点。
https://stackoverflow.com/questions/8398126
复制相似问题