1

在使用 Razor 引擎和实体框架的 MVC4 Web 应用程序中,是否可以创建一个模板以与 html 帮助器 @Html.EditorForModel 一起使用,以便更好地显示具有指向其他表的链接的实体。

我正在使用的示例是一个包含两个 DBSet、Regions 和 Schools 的 DbContext。地区有很多,一所学校可能属于一个地区。理想情况下,我希望学校的编辑器显示可供选择的地区下拉列表。我想制作一个足够通用的模板,这样我就可以调用@Html.EditorForModel 助手并一次性生成表单,并且我可以稍后对区域或学校表进行更改并进行更改无需我进行更改即可反映在编辑表单中。

一些代码:

public class MyContext : DbContext
{
    public MyContext ()
        : base("DefaultConnection")
    {
    }

    public DbSet<Region> Regions { get; set; }
    public DbSet<School> Schools { get; set; }

    [Table("Regions")]
    public class Region
    {
        public Region()
        {
            Schools = new List<School>();
        }

        [Key]
        public int RegionId { get; set; }
        [StringLength(256)]
        public string RegionName { get; set; }

        public ICollection<School> Schools { get; set; }
    }

    [Table("Schools")]
    public class School
    {
        public School() { }

        [Key]
        public int SchoolId { get; set; }
        [StringLength(256)]
        public string SchoolName { get; set; }
        [ForeignKey("Region")]
        public int RegionId { get; set; }

        public virtual Region Region { get; set; }
    }
}

我创建了一个局部视图来创建显示编辑器表单,我的想法是我可以传入区域或学校作为视图模型。

@model object
@using (Html.BeginForm())
{           
    @Html.ValidationSummary("Broken stuff:")
    @Html.EditorForModel()               
}

我不知道这是否可能,但我真的希望新模板循环遍历实体的属性并检测是否存在链接表(例如 School 包含区域)并在下拉列表中显示区域列表.

4

2 回答 2

2

好吧,一般来说,将数据模型直接传递给视图进行渲染是个坏主意。除其他外,还存在安全问题。但是,即使您要这样做,您也不希望像那样传递整个数据上下文,因为它的结构不适合在网页中呈现。

于 2013-07-17T15:40:00.233 回答
1

你可以。看看这里,看看如何。

另一种方法是您使用脚手架并让它创建您的视图。大多数时候(!)它会为您创建正确的下拉菜单,您只需根据需要自定义视图。

在您看到奇怪的 DDL 的少数情况下,您只需要更正相关操作方法中的参数并返回列表项到视图ValueName...DataName

于 2013-07-22T15:59:03.643 回答