2011-04-17 79 views
8

我玩与在Asp.net MVCMVC 3 - 脚手架下拉列表

我对国家

public IEnumerable<SelectListItem> Countries { get; set; } 

在我的视图模型的属性然而,脚手架,当我创建一个查看并指定它不支持下拉列表的视图模型,如我预期的那样。事实上它完全被忽略了。

我已经在这样做之前编制的项目

我也尝试添加一个属性,这样

public int CountryId { get; set; } 

正如本文认为存在一种在工作

http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/

公约我正在使用添加视图选项,当你右键点击ac时控制器操作方法

任何想法是什么错?

回答

5

在我目前的项目中,我遇到了这个问题,无法找到一个快速的方法来在我的一个实体内搭建一对多关系的下拉列表。

我最终什么事做是这样的:

1-创建正常AddView =>创建方式。

2 - 如果我在我的模型类ID属性,则defaul;吨模板会产生这样的事情来代表这个属性在我看来:

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

3-现在我需要更换这个

IEnumerable<SelectListItem> cityItems = dataContext.Cities.AsEnumerable().Select(c => new SelectListItem() 
      { 
       Text = c.Name, 
       Value = c.ID.ToString(), 
       Selected = false, 
      }); 
      SelectList cityList = new SelectList(cityItems, "Value", "Text"); 
      ViewBag.CityList = cityList; 

这将获取城市表,并创建一个选择列表的我可以通过我的看法,并使用它为用户提供DrobDown:有工作的一个默认模板,所以我在CREATE方法写了这个代码它的项目。

4-由一个类似如下取代在我看来,默认代码:

<div class="Post-label"> 
         <div class="editor-label"> 
          @Html.LabelFor(model => model.CityID) 
         </div> 
         <div class="editor-field"> 
          @Html.DropDownListFor(m => m.CityID, ViewData["CityList"] as SelectList) 
          @Html.ValidationMessageFor(model => model.CityID) 
         </div> 
</div> 

我用ViewData["CityList"]代替ViewBag.CityList的原因是,这一个工作,但其他没有。

5-现在我的视图正在查找并正在获取City数据,就像我期望的那样,并且在我的Edit视图中使用相同的模型也导致了工作。

试试看,让我知道发生了什么,谢谢。

+0

感谢您的回复。我知道如何手工编写代码,我只是想了解为什么自动脚手架不适用于这种情况 – ChrisCa 2011-04-17 12:51:19

1

为了必须选择一个国家,一个下拉选择模型中的属性应该是:

public Country Country{ get; set; }由EF使用导航属性,不涉及到数据库的

public Country CountryId{ get; set; } 创建的人物表的外键

一个人的每个实例/记录都与一个国家相关联:通过代码和数据库的CountryID通过导航属性定义该关系。 的scaffholding模板然后将生成的编辑/使用create方法和观点:

ViewBag.PossibleCountries 

Here's a similar scenario.

4

我注意到,对于给定的模式,创建一个新的控制器时,“创建”脚手架生成的代码与在现有控制器中右键单击并说“添加视图”并选择“创建”脚手架模板不同。在第一种情况下,假定你有子类中

public Country Country {get;set;} 
public int CountryID {get;set;} 

那么这种情况下(与MVC脚手架读/写和适当的模型类中添加控制器)正确的属性会产生@ Html.DropDownList父关系,而在控制器的Create方法中右键单击不会支撑下拉列表,而是会为该关系创建@ Html.EditorFor。

所以如果你想脚手架代码生成下拉的答案可能是删除并重新创建你的控制器,如果可能的话,否则手动添加在适当的代码。