从部分类中的数据库加载项列表

时间:2011-04-04 10:40:57

标签: asp.net-mvc entity-framework

似乎是一个愚蠢的问题,但我在这里......

我有一个表商店(已经添加到我的.edmx文件中)并且我已经创建了一个部分类商店,以便添加这样的验证内容,如下所示:

[MetadataType(typeof(ShopsMetaData))]
public partial class Shops
{

}

public class ShopsMetaData
{
    [HiddenInput(DisplayValue = false)]
    public int ID { get; set; }

    [Display(Name = "Shop name")]
    [Required(ErrorMessage = "The field shop name can't be empty")]
    public string ShopName { get; set; }

    [Required(ErrorMessage = "The field address can't be empty")]
    public string Address { get; set; }

    [Display(Name = "State")]
    [Required(ErrorMessage = "The field state can't be empty")]
    public string State { get; set; }
}

问题在于“状态”属性:我可以简单地留下一个文本框,该人可以输入州的缩写,但这不会那么明智。我可以使用预定义状态的下拉列表,但我需要从数据库中获取它们。

有没有办法可以使用可测试代码从这个类中的数据库中获取状态列表?

1 个答案:

答案 0 :(得分:4)

我通常做的是在我的Action中设置一个动态属性来保存这样的状态列表:

ViewBag.States = (from state in context.States
                  select new SelectListItem {          
                                Text = state.Name, 
                                Value = state.Id.ToString()}
                  ).ToList();

然后我的View看起来像这样

<div class="editor-label">
    @Html.LabelFor(model => model.State)
</div>
<div class="editor-field">
    @Html.DropDownListFor(model => model.State, (IList<SelectListItem>)ViewBag.States)
</div>

这假设您的模型包含State属性。