如何更改要在 ASPNetCore EF 脚手架中使用的导航栏

问题描述 投票:0回答:1

我在 EF6 和 AspNetCore 中使用代码优先,使用脚手架模板创建数百个表和视图。

在简单的导航模型中

    public class BaseModel 
    {
        public int Id { get; set; }
        [MaxLength(100)]
        [Column(TypeName = "varchar(100)")]
        public string? BaseModelNo { get; set; }
        public virtual ICollection<SubModel>? SubModels { get; set; } 

    }
    public class SubModel
    {
        public int Id { get; set; }

        [MaxLength(100)]
        [Column(TypeName = "varchar(100)")]
        public string? SubModelNo { get; set; }
 
        public int BaseModelId { get; set; }
        public virtual BaseModel? BaseModelNo { get; set; }

    }

搭建脚手架时,控制器:

        ...
            ViewData["BaseModelId"] = new SelectList(_context.BaseModels, "Id", "Id", model.BaseModelId);
            return View();
        ...

和详细视图


        ...
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.BaseModel.Id)
        </dd>
        ...

我的问题是 有没有办法让它自动绑定到第一个不是主键的属性

Id
,在这个例子中应该是
BaseModelNo

所以在控制器中:

        ...
            ViewData["BaseModelId"] = new SelectList(_context.BaseModels, "Id", "BaseModelNo", model.BaseModelId);
            return View();
        ...

和详细视图

        ...
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.BaseModel.BaseModelNo)
        </dd>
        ...

我试过的:改变模型的顺序

c# entity-framework asp.net-core scaffolding
1个回答
0
投票

对于遇到此问题或发现它有趣的任何人,我发布了源代码 在here

的gihub上

我仍然希望有人解释为什么它以这种方式工作,但就目前而言,它可以工作,只需将模型放在一个单独的项目中即可。

在我的示例中,Models.cs 脚手架中的实体绑定到 Id,而 OtherModels.cs 脚手架中的实体绑定到第一个不可为 null 的字符串属性。

    public class OtherBase
    {
        public int Id { get; set; }
        public string? Name1 { get; set; }
        public string Name2 { get; set; }
        public virtual ICollection<OtherSub> OtherSub { get; set; }
    }

所以在这种情况下将绑定到 Name2.

© www.soinside.com 2019 - 2024. All rights reserved.