实体框架代码1st&;Razor未为FK字段生成DropDowns

本文关键字:FK 未为 字段 DropDowns Razor 代码 框架 1st amp 实体 | 更新日期: 2023-09-27 18:28:20

我正在使用ASP.NET MVC3以及Razor和Entity Framework Code First来创建一个新的非常小的应用程序。根据我所读到和看到的,当类和数据之间存在FK关系时,Razor应该生成一个下拉(选择)输入字段。但是,当下面的代码运行时,我会得到PartnerTypeId和PartnerSubTypeId的文本框。不确定我的故障在哪里。

public class Partner
{
    public int Id { get; set; }
    [Required]
    [MinLength(5)]
    [MaxLength(300)]
    public String Name { get; set; }
    [Required]
    public int PartnerTypeId { get; set; }
    public PartnerType PartnerType { get; set; }
    public int PartnerSubTypeId { get; set; }
    public PartnerSubType PartnerSubType { get; set; }
}
public class PartnerType
{
    public int Id { get; set; }
    [Required]
    [MaxLength(40)]
    public String Name { get; set; }
    [Required]
    public bool IsActive { get; set; }
    public virtual ICollection<Partner> Partners { get; set; }
}

视图

<fieldset>
        <legend>Partner</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.PartnerTypeId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PartnerTypeId)
            @Html.ValidationMessageFor(model => model.PartnerTypeId)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.PartnerSubTypeId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PartnerSubTypeId)
            @Html.ValidationMessageFor(model => model.PartnerSubTypeId)
        </div>
</fieldset>

实体框架代码1st&;Razor未为FK字段生成DropDowns

从我所读到和看到的一切来看,当存在FK关系时在类和数据之间,Razor应该生成一个下拉列表(select)输入字段。

我不知道你在哪里看到或读到这样的东西。以下是ASP.NET MVC中的默认编辑器模板。正如您所看到的,除了可为null的布尔属性之外,它们中绝对没有一个生成任何<select>元素。

Razor对FK关系的含义一无所知。它不知道数据库是什么意思。Razor是一个模板视图引擎,可与模型一起使用,并支持标准编辑器和显示模板(请参阅我链接到的文章),这些模板依赖于用于装饰模型属性的元数据和属性类型。如果你对默认模板不满意,当然,你可以随时编写自定义模板。例如,您可以编写一个编辑器模板来生成下拉列表。当然,为了生成下拉列表,不要忘记您需要两件事:一个是将所选值绑定到的标量属性,另一个是某个复杂类型的集合属性,其中每个元素至少由2个属性组成,这些属性表示将用于绑定下拉列表选项的值和文本。