使用数据MVC 3 .NET填充多选列表

时间:2012-09-26 10:16:29

标签: c# asp.net sql-server asp.net-mvc entity-framework

我一直在Google和Stackoverflow上搜索有关如何使用可以选择的值填充多选框的解决方案。但没有运气。

public class PriceObj
{
    public int ID { get; set; }
    public decimal Price { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<PriceGroupObj> PriceGroup {get; set;}
}

public class PriceGroupObj
{
   public int ID { get; set; }
   public string Name { get; set; }
}


public class PriceDatabaseContext : DbContext
{
    public DbSet<PriceObj> PriceObjs { get; set; }
    public DbSet<PriceGroupObj> PriceGroupObjs { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();

        modelBuilder.Entity<PriceObj>()
            .HasMany(g => g.PriceGroup)
            .WithMany()
            .Map(t => t.MapLeftKey("GroupID").MapRightKey("PriceID").ToTable("PriceGroup"));
    }


}

然后我希望能够在价格对象的编辑视图中选择所有适当的价格组。但是我没有让它工作,它没有在MultiSelect框中填充所有已经创建的组。

这是我在Razor veiw中使用的代码:

@Html.ListBoxFor(model => model.PriceGroup, Model.PriceGroup.Select(pg => new SelectListItem { Text = pg.Name, Value = pg.ID.ToString() }), new { Multiple = "multiple" })

选择元素显示在网站上,但没有值可供选择。

请帮我解决一下,我的链条坠落的地方。

2 个答案:

答案 0 :(得分:11)

使用适合您视图要求的视图模型:

public class PriceViewModel
{
    public int[] SelectedPriceIds { get; set; }
    public IEnumerable<SelectListItem> Prices { get; set; }
}

ListBoxFor在视图模型上需要2个属性:

  1. 将保存所选元素的ID的基本类型(string[]id[]Guid[],...)的集合属性
  2. 将保存所有项目列表的IEnumerable<SelectListItem>属性
  3. 然后在视图中:

    @Html.ListBoxFor(x => x.SelectedPriceIds, Model.Prices)
    

    现在,您的控制器操作会将此视图模型传递给视图,而不是您的域对象,而这些对象根本不适合您要实现的目标。在控制器操作中,您将从域模型中填充此视图模型。

答案 1 :(得分:0)

我可以在列表框中选择多个值,因此我建议在其他类型中执行此操作

你可以像下面这样使用....

你使用这个js文件..

<script type="text/javascript" src="@Url.Content("~/jquery-1.6.4.min.js")"></script>

    <script type="text/javascript" src="@Url.Content("~/chosen.jquery.js")"></script> 

<link href="@Url.Content("~/CSS/chosen.css")" rel="stylesheet" type="text/css" />

并在您的视图中使用

<script type="text/javascript">
        $(document).ready(function() {
            $('.chzn-select').chosen();

        });
 </script>

@Html.ListBoxFor(model => model.CountryId,Model.Countries, new { @class = "chzn-select",data-placeholder="Choose a Country...", Style = "width: 150px;" })

您只需绑定列表框并选择这样的多个值。 查看更多关于jquery选择...     http://davidwalsh.name/jquery-chosen

enter image description here

我认为这会对你有帮助..