从viewModel在Asp.net MVC 3上实现Dropdownlist

时间:2011-08-19 06:09:15

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我是.net和mvc平台的新手,我有很多int字段存储一些下拉列表值,由于数据库大小,我创建了字段int类型所以我通过这种方法实现dropdownlist,它可以工作但是我不知道在viewmodel上存储值文本的正确解决方案是示例代码:

我很抱歉我的英语,如果你什么都不懂,请告诉我。

model property.cs

    [Required(ErrorMessage = "Bu alan gereklidir!")]
    [Display(Name = "Şehir"), MaxLength(60)]
    public int City { get; set; }

propertymgmtviewModel

 public Property Property { get; set; }
    public IEnumerable<Property> Properties { get; set; }
    public IEnumerable<SelectListItem> Cities
    {
        get
        {
            return new[]
            {
            new SelectListItem { Text="--Select One---", Value = "", Selected=true},
            new SelectListItem { Text="Chicago", Value = "1"},
            new SelectListItem { Text="New York", Value = "2"},
            new SelectListItem { Text="Zimbabwe", Value = "3"},
            };
        }

查看编辑视图页面:

 @Html.DropDownListFor(model => model.Property.City,
        new SelectList(Model.Cities,"Value","Text"))

显示值viewpage:

   <td>
   @(item.City != null ?
   Model.Cities.SingleOrDefault(c => c.Value == item.City.ToString()).Text
   : "")

        </td>

2 个答案:

答案 0 :(得分:5)

如果我是你,我应该使用这样的字典键/ displayName作为SelectList:

一个静态成员(因为它是静态的......):

static Dictionary<int, string> CitiesDict = new Dictionary<int, string>()
    {
        { -1 , "--Select One---"},
        { 0 ,"Chicago"},
        { 1 ,"New York"},
        { 2 ,"Zimbabwe"},
    };

下拉列表的一个属性:

public SelectList Cities { get; set; }

在构造函数中初始化如下:

Cities = new SelectList(CitiesDict , "Key", "Value", -1);

然后在视图中进行编辑:

@Html.DropDownListFor(model => model.Property.City, Model.Cities) 

用于显示:

@(CitiesDict.ContainsKey(Model.City) ? CitiesDict[Model.City] : "")

答案 1 :(得分:0)

我还没有使用过Razor语法(仍然在MVC2上),但我相信这部分是错误的:

@Html.DropDownListFor(model => model.Property.City,
        new SelectList(Model.Cities,"Value","Text"))

您需要告诉视图引擎使用(select属性和与value元素关联的文本)填充option列表的值,但我不知道正确的MVC3语法可以帮助您解决它。希望别人可以......