0

当我使用添加视图对话框生成视图时,如何获取 Entity Frameworks 外键。

我的模型就像

public class System
{
    #region Properties

    public int SystemId { get; set; }
    public string SystemName { get; set; }

    #endregion
}

public class Module
{
    #region Properties

    public int ModuleId { get; set; }

    //[Required]
    [Display(Name="Module Name")]
    public string ModuleName { get; set; }

    [Display(Name="Date Added")]
    public DateTime DateAdded { get; set; }

    //[ForeignKey("CurrentSystem")]

    public int SystemId { get; set; }

    //[ForeignKey()]
    //[ForeignKey("SystemId")]
    public System System { get; set; }

    #endregion
}

当我单击控制器,然后单击添加视图时,模式打开。我选择了所有需要的细节,然后生成以下内容(我没有包括整个视图)。

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Module</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.ModuleName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ModuleName)
        @Html.ValidationMessageFor(model => model.ModuleName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.DateAdded)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.DateAdded)
        @Html.ValidationMessageFor(model => model.DateAdded)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.SystemId)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.SystemId)
        @Html.ValidationMessageFor(model => model.SystemId)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

我希望 SystemId 成为下拉列表而不是文本字段。我该怎么做呢 ?

4

2 回答 2

1

您确定您创建了一个从 dbContext 派生的类,其属性为 typeDBSet<System>和 type 属性DBSet<module>?如果你有,并且你选择了一个带有选项“使用实体框架读取和写入操作”的控制器,并在下面的下拉列表中选择你的类模块和你的上下文,MVC 应该生成正确的代码视图和控制器代码来显示系统的组合。

至少它在 MVC4 中对我有用。请记住在尝试添加控制器之前生成您的项目。我认为 MVc 使用反射,所以它需要一个最新的程序集......

于 2012-06-25T18:02:50.073 回答
1

使用视图模型。MVC 使用数据注释来确定如何显示属性。如果您希望视图以与模型不同的方式运行,则需要将模型映射到视图模型以处理额外的逻辑(即存在 int 的下拉菜单)。然后从视图模型类生成您的视图。

视图模型添加了一个层来处理这里的关注点分离。您希望您的视图与您的模型所允许的不同,因此添加一个视图模型类,该类将获取模型数据并以您想要的方式显示它。

于 2012-06-25T16:18:52.593 回答