这对我来说似乎很痛苦,但是由于某种原因,我无法按照我想要的方式来处理它。也许不可能像我这样做的方式那样,但这似乎不可能。这个问题可能有些相关: 同一页面上的ASP.NET MVC模型相关实体.

我有一个编辑图板来编辑具有多个相关实体参考的实体。渲染编辑器后,给用户一个下拉列表以从中选择相关实体,下拉列表返回ID作为其值。

<%=Html.DropDownListFor(m => m.Entity.ID, ...)%>

当请求发送时,表单值的命名如预期:“ Entity.ID”,但是我强烈键入的模型定义为一个操作参数没有实体。ID填充了请求中传递的值。

public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { }

我尝试摆弄绑定()属性并指定 Bind(Include = "Entity.ID") 在实体WithChildentities上,但这似乎不起作用。我也尝试了 Bind(Include = "Entity"), ,但这导致了模型的尝试绑定完整的“实体”定义(毫不奇怪)。

有什么方法可以使默认模型活页夹填充子实体ID,或者我需要为每个子实体的ID添加操作参数,然后手动将值复制到模型定义中?

有帮助吗?

解决方案

您看过汽车驾驶商吗?我同意这不需要,因为绑定应该起作用,但是...

我使用了一些困难 Html.XYZFor 助手并恢复使用MVC 1.1符号,并且一切都起作用。

其他提示

没有 DropDownListFor 使用一个参数的辅助方法。标准 下拉列表 方法至少采用两个参数:第一个是用于计算选择名称的lambda,第二个是一个 IEnumerable<SelectListItem>:

<%= Html.DropDownListFor(m => m.Entity.ID, Model.EntitiesList) %>

还如何 EntityWithChildEntities 类型看起来像?一定是这样:

public class EntityType
{
    public string ID { get; set; }
}

public class EntityWithChildEntities
{
    public EntityType Entity { get; set; }

    public IEnumerable<SelectListItem> EntitiesList
    {
        get 
        {
            return new[]
            {
                new SelectListItem { Value = "1", Text = "foo" },
                new SelectListItem { Value = "2", Text = "bar" },
            }
        }
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top