在使用Razor引擎和实体框架的MVC4 Web应用程序中,是否可以创建一个与html帮助程序@ Html.EditorForModel一起使用的模板,以便更好地显示包含指向其他表的链接的实体。
我正在使用的示例是一个包含两个DBS,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; }
}
}
我创建了一个局部视图来创建显示编辑器表单,我想可以将Region或School作为视图模型传递。
@model object
@using (Html.BeginForm())
{
@Html.ValidationSummary("Broken stuff:")
@Html.EditorForModel()
}
我不知道这是否可行,但我真的希望新模板循环实体的属性并检测是否有链接表(例如学校包含一个区域)并显示区域列表在下拉列表中。
答案 0 :(得分:2)
通常,将数据模型直接传递给视图进行渲染是个坏主意。除此之外,还存在安全问题。但是,即使您要这样做,也不希望传递整个数据上下文,因为它的结构不适合在网页中呈现。
答案 1 :(得分:1)
你可以关闭科西嘉。看here看看如何。
更改是您使用脚手架并让它来创建您的视图。大多数情况下(!)它会为您创建正确的DropDowns,如果需要,您只需自定义视图。
在那些看到奇怪DDL的情况下,您只需要纠正相关操作方法中的ValueName
和DataName
参数,这些参数会将列表项返回到视图中......