如何指定使用MVC Scaffolding显示哪个字段

时间:2014-07-05 18:21:30

标签: entity-framework asp.net-mvc-4 ef-code-first asp.net-mvc-scaffolding

我正在使用EF Code First数据库创建MVC4应用程序。我正在处理一些外键声明。我希望使用define字段来显示模型声明中脚手架的下拉列表。例如:

我的简化模型声明如下:

public class Contact
{
    public int ID { get; set; }
    public string Prefix { get; set; }
    public string First { get; set; }
    public string Middle { get; set; }
    public string Last { get; set; }
    public string FullName
    {
        get { return (Last + ", " + First + " " + Middle).Trim(); }
    }
}

public class Role
{
    public int ID { get; set; }
    public string RoleName { get; set; }
    public string RoleDescription { get; set; }
}

public class RoleAssignment
{
    [Key]
    public int ID { get; set; }

    [ForeignKey("Contact")]
    public int Contact_ID { get; set; }
    public virtual Contact Contact { get; set; }

    [ForeignKey("Role")]
    public int Role_ID { get; set; }
    public virtual Role Role { get; set; }
}

我生成标准的脚手架,编辑.cshtml看起来像这样:

 <fieldset>
    <legend>RoleAssignment</legend>

    @Html.HiddenFor(model => model.ID)

    <div class="editor-label">
        @Html.LabelFor(model => model.Contact_ID, "Contact")
    </div>
    <div class="editor-field">
        @Html.DropDownList("Contact_ID", String.Empty)
        @Html.ValidationMessageFor(model => model.Contact_ID)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Role_ID, "Role")
    </div>
    <div class="editor-field">
        @Html.DropDownList("Role_ID", String.Empty)
        @Html.ValidationMessageFor(model => model.Role_ID)
    </div>

    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

但是,下拉列表使用&#34;前缀&#34;用于下拉和显示的字段。我希望它使用&#34; FullName&#34;领域。如何在Contact模型声明中指定它? (我知道如何修改.cshtml代码,但我希望它能用于纯生成的代码。)

2 个答案:

答案 0 :(得分:1)

行。弄清楚了。要为表指定下拉列表的自定义命名字段,请使用模型类中的“DisplayColumn”,然后使用“NotMapped”属性阻止自定义显示字段映射到数据库,并为其设置一个setter什么都不做:

[DisplayColumn("FullName")]
public class Contact
{
    public int ID { get; set; }

    [NotMapped]
    [Display(Name = "Full Name")]
    public string FullName
    {
        get { return (Last + ", " + First + " " + Middle).Trim(); }
    }
    public string Prefix { get; set; }
    public string First { get; set; }
    public string Middle { get; set; }
    public string Last { get; set; } }

答案 1 :(得分:0)

我对我的问题有部分答案:

添加&#34; DisplayColumn&#34; model类的属性允许您更改脚手架的显示字段,如下所示:

[DisplayColumn("First")]
public class Contact
{
    public int ID { get; set; }
    [Display(Name = "Full Name")]
    public string FullName
    {
        get { return (Last + ", " + First + " " + Middle).Trim(); }
    }
    public string Prefix { get; set; }
    public string First { get; set; }
}

但是,它不适用于只读字段&#34; FullName&#34;。还在努力想出那个......