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

C# 从viewModel在Asp.net MVC 3上实现Dropdownlist,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我是.net和mvc平台的新手,我有很多int字段存储一些dropdownlist值,我根据数据库大小创建了int类型的字段,所以我通过这种方法实现了dropdownlist,它可以工作,但我不知道在viewmodel上存储值文本是否是正确的解决方案示例代码: 我为我的英语感到抱歉,如果你什么都不懂,请告诉我 模型属性.cs [Required(ErrorMessage = "Bu alan gereklidir!")] [Display(Name = "Şehir"), Max

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

我为我的英语感到抱歉,如果你什么都不懂,请告诉我

模型属性.cs

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

 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"},
            };
        }
显示值查看页面:

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

        </td>

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

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

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

您需要告诉视图引擎要用哪些值填充
select
列表(
value
属性和与
选项
元素关联的文本),但我不知道正确的MVC3语法来帮助您修复它。希望其他人可以…

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

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

您需要告诉视图引擎要用哪些值填充
select
列表(
value
属性和与
选项
元素关联的文本),但我不知道正确的MVC3语法来帮助您修复它。希望其他人可以…

如果我是你,我应该在SelectList中使用这样的字典键/显示名:

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

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

Cities = new SelectList(CitiesDict , "Key", "Value", -1);
然后在要编辑的视图中:

@Html.DropDownListFor(model => model.Property.City, Model.Cities) 
以及用于显示:

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

如果我是你,我应该在SelectList中使用这样的字典键/显示名:

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

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

Cities = new SelectList(CitiesDict , "Key", "Value", -1);
然后在要编辑的视图中:

@Html.DropDownListFor(model => model.Property.City, Model.Cities) 
以及用于显示:

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

不确定我是否理解您的问题-您是否在问您的解决方案在架构上是否合理?或者你的代码中真的有错误吗?关于在viewmodel中存储城市,为什么不创建一个城市模型,将城市存储在数据库中,然后将城市作为虚拟财产公开在原始模型上?这样,您就可以将“数据”(即城市)保存在它所属的数据库中。是的,我问它在体系结构上是否正确,有30多个selectlist和400多个文本值,所以我想问,在dbase或viewmodel中存储哪种方式更准确?我不知道我是否理解您的问题-您是否在问您的解决方案在体系结构上是否合理?或者你的代码中真的有错误吗?关于在viewmodel中存储城市,为什么不创建一个城市模型,将城市存储在数据库中,然后将城市作为虚拟财产公开在原始模型上?这样,您就可以将“数据”(即城市)保存在它所属的数据库中。是的,我问它在体系结构上是否正确,有30多个selectlist和400多个文本值,所以我想问,在dbase或viewmodel中存储哪种方式更准确?我会尝试,它比我使用它的方式更简单,因为我需要编写这么多属性。它起作用了,但nullable属性存在问题,所以我将在另一个问题中提问,我会尝试,它比我使用它的方式更简单,因为我需要编写这么多属性。它起作用了,但nullable属性存在问题,因此我将在另一个问题中提问,我认为在view或viewModel上填充没有问题,这也是我的观点,代码通过此方法运行良好,我不认为在view或viewModel上进行填充会有问题,这也是我的观点,通过这种方法代码运行良好,