1

我一直在 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"));
    }


}

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

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

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

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

请帮我整理一下,我的链条掉在哪里了。

4

2 回答 2

11

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

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

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

  1. string[]原始类型 ( , id[], , ...)的集合属性Guid[],它将保存所选元素的 id
  2. IEnumerable<SelectListItem>将保存所有项目列表的属性

然后在视图中:

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

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

于 2012-09-26T10:41:08.580 回答
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

在此处输入图像描述

我想这会帮助你..

于 2012-09-26T11:08:16.437 回答