Entity framework EntityFramework的MVC4编辑器Formodel模板

Entity framework EntityFramework的MVC4编辑器Formodel模板,entity-framework,asp.net-mvc-4,razor,Entity Framework,Asp.net Mvc 4,Razor,在使用Razor引擎和实体框架的MVC4 web应用程序中,是否可以创建一个模板,用于html helper@html.EditorForModel,以便更好地显示具有其他表链接的实体 我正在使用的示例是一个DbContext,其中包含两个dbset、region和Schools。有许多地区,一所学校可能属于一个地区。理想情况下,我希望学校的编辑显示一个地区下拉列表,供选择。我想制作一个足够通用的模板,这样我就可以调用@Html.EditorForModel帮助程序,表单一次生成,并且我可以在以

在使用Razor引擎和实体框架的MVC4 web应用程序中,是否可以创建一个模板,用于html helper@html.EditorForModel,以便更好地显示具有其他表链接的实体

我正在使用的示例是一个DbContext,其中包含两个dbset、region和Schools。有许多地区,一所学校可能属于一个地区。理想情况下,我希望学校的编辑显示一个地区下拉列表,供选择。我想制作一个足够通用的模板,这样我就可以调用@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; }
    }
}

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

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

你可以离开科塞。看看是怎么回事

另一种方法是使用脚手架,让它来创建视图。大多数时候(!)它会为您创建正确的下拉列表,您只需自定义视图即可

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

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