0

这对我来说似乎很痛苦,但由于某种原因,我无法让它按照我想要的方式工作。也许我这样做是不可能的,但这似乎不太可能。这个问题可能有点相关:ASP.NET MVC Model Binding Related Entities on Same Page

我有一个 EditorTemplate 来编辑具有多个相关实体引用的实体。呈现编辑器时,会为用户提供一个下拉列表以从中选择相关实体,下拉列表返回一个 ID 作为其值。

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

发送请求时,表单值按预期命名:“Entity.ID”,但是我定义为操作参数的强类型模型没有填充请求中传递的值的 Entity.ID。

public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { }

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

有没有办法让默认模型绑定器填充子实体 ID,或者我需要为每个子实体的 ID 添加操作参数,然后手动将值复制到模型定义中?

4

2 回答 2

1

Have you looked at AutoMapper? I agree that this shouldn't be required because the binding should work but...

I've had a little difficulty with using the Html.XYZFor helper and have reverted back to using the MVC 1.1 notation and it all works.

于 2010-06-01T22:41:00.673 回答
0

没有DropDownListFor采用一个参数的辅助方法。标准的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" },
            }
        }
    }
}
于 2010-06-02T06:10:02.513 回答