代码之家  ›  专栏  ›  技术社区  ›  Nathan Taylor

ASP.NET MVC-将子实体绑定到模型

  •  0
  • Nathan Taylor  · 技术社区  · 16 年前

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

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

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

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

    public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { }
    

    我试着摆弄bind()属性并指定 Bind(Include = "Entity.ID") 关于儿童实体的实体,但这似乎不起作用。我也尝试过 Bind(Include = "Entity") 但这导致ModelBinder试图绑定完整的“实体”定义(这并不奇怪)。

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

    2 回复  |  直到 16 年前
        1
  •  1
  •   griegs    16 年前

    你看过汽车旅馆吗?我同意不需要这样做,因为装订应该有效,但是…

    我在使用 Html.XYZFor 帮助并恢复到使用MVC 1.1符号,一切正常。

        2
  •  0
  •   Darin Dimitrov    16 年前

    没有 DropDownListFor 采用一个参数的Helper方法。标准 DropDownListFor 方法至少接受两个参数:第一个参数是用于计算select名称的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" },
                }
            }
        }
    }
    
    推荐文章