2014-02-26 124 views
4

我正在做一些实验性的编程,以赶上ASP MVC。MVC 5代码第一个脚手架与简单的关系

我为包含房间的建筑物创建了一个项目。一个非常简单的一对多关系。我试图让脚手架工作,从旧的MVC例子看来,这应该只是工作。但是,Rooms中的BuildingId字段未映射到Building模型 - 视图中没有选择列表。

我的车型有:

namespace BuildingManagement.Models 
{ 
    public class Building 
    { 
     public int Id { get; set; } 

     [Required] 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string Street { get; set; } 
     public string City { get; set; } 
     public string Province { get; set; } 
     public string PostalCode { get; set; } 

     [Display(Name = "Phone")] 
     [DataType(DataType.PhoneNumber)] 
     [Required] 
     public string PhoneMain { get; set; } 

     [Display(Name = "Contact")] 
     [Required] 
     public string ContactName { get; set; } 
     public string Description { get; set; } 

     public virtual ICollection<Room> Rooms { get; set; }  

    } 
} 

namespace BuildingManagement.Models 
{ 
    public class Room 
    { 
     public int Id { get; set; } 

     [Required] 
     public string Name { get; set; } 
     public string Type { get; set; } 
     public int BuildingId { get; set; }   
    } 
} 

我生成使用实体框架,它创造的形式,但可以欣赏到控制器不与房间编辑视图预期号楼选择列表。它改为显示一个整数输入字段。

我错过了什么?

回答

7

你应该改变这样的:

public class Room 
{ 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public int BuildingId { get; set; }   
} 

public class Room 
{ 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 
    public string Type { get; set; } 

    [ForeignKey("ContainingBuilding")] 
    public int BuildingId { get; set; }  

    public virtual Building ContainingBuilding{ get; set;} 
} 

这样脚手架将产生建筑选择列表。上述

Model.CountryListItems= new List<SelectListItem>(); 
    CountryListItems.Add(new SelectListItem 
     { 
      Text = "Albania", 
      Value = "1" 
     }); 
    CountryListItems.Add(new SelectListItem 
     { 
      Text = "Bangladesh", 
      Value = "2", 
      Selected = true 
     }); 
    CountryListItems.Add(new SelectListItem 
     { 
      Text = "Canada", 
      Value = "3" 
     }); 

上述样本代码

+0

我认为让我更接近。现在,我得到一个导航属性错误'类型'FacilityManagement.Models.Room'属性'BuildingId'上的ForeignKeyAttribute无效。在依赖类型'BuildingManagement.Models.Room'上未找到导航属性“Building”。名称值应该是一个有效的导航属性名称.' – sreimer

+1

有时候不可能将类和名称命名为相同的名称,正如我在此处显示的那样。我会编辑答案。 – Mithrandir

0
public List<SelectListItem> CountryListItems {get; set;} 
public int CountryId {get; set;} 

样品模型可在控制器或其它发电机模型类一起使用。

@Html.DropDownListFor(model => model.CountryId, model.CountryListItems, "-- Select Status --") 

上面的示例视图块。

相关问题