首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UpdateModel没有更新“深度”属性

UpdateModel没有更新“深度”属性
EN

Stack Overflow用户
提问于 2011-12-06 10:06:48
回答 3查看 932关注 0票数 0

我有一个ASP.NET MVC应用程序。在某一点上,我在Controller方法中获得了一个FormCollection,我希望使用它来更新模型。在集合中,并非所有的值都是该模型的属性,要更新的属性是列表中的项,该列表也是来自另一个列表的项。像这样的事情(我希望这是明确的):

代码语言:javascript
复制
propertyToUpdate --> model.Items[0].Subitems[0].SomePropertyClass.Value;

我在我的主计长身上试过这个:

代码语言:javascript
复制
UpdateModel(model);

问题是,这是行不通的,我认为这与反射不起作用有关。我搜索了一下,偶然发现了这篇文章。所以我知道使用前缀参数可以解决这个问题。但在我的例子中却不是这样,因为属性作为列表中的项在模型中“更深”地存在。

有人知道我怎么能解决这个问题吗?

更新:

下面是该属性的EditorTemplate:

代码语言:javascript
复制
@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>

此模板称为如下所示:

代码语言:javascript
复制
<ul>
    @Html.EditorFor(model => model.SegmentRequirement.MaterialRequirements[j].Properties)
</ul>

这是足够的代码还是还缺少什么?

Update2:

好的,在所有的子属性中,我定义了无参数构造函数,现在我调用:

代码语言:javascript
复制
UpdateModel(segmentRequirement, "SegmentRequirement", form.ToValueProvider());

这将更新模型,但是MaterialRequirements中的所有内容都是重新实例化的.:S

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-06 12:24:50

UpdateModel在“深度属性”上工作得很好。

问题可能是您获得的集合中的数据不等于属性名称。

检查3处,查看从页面中得到的值。

  1. 表单值。
  2. 路由数据
  3. 查询字符串

严格按照这个顺序。

应该匹配建模属性名称的

更新:

如何匹配属性名称的密钥?

输入id将是您获得的键,更改id以匹配您的属性名称,或者更好地使用HtmlTextBoxFor助手:参见文章:

票数 1
EN

Stack Overflow用户

发布于 2011-12-06 10:25:06

也许您应该创建扁平的ViewModel,然后使用它填充视图,然后将其与实际模型同步。

票数 1
EN

Stack Overflow用户

发布于 2011-12-06 11:11:50

您能向我们展示您的模型和视图吗?如果您没有使用htmlhelper,那么您必须非常好地理解命名约定,以便使模型绑定与您的模型一起工作。所以第一件事是向我们展示你的模型和观点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8398126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档