我有一个像这样的视图模型:
public class ListingPlanEditorViewModel
{
public ListingPlan Plan { get; set; }
public IEnumerable<Directory> SiteDirectories { get; set; }
}
一个属性是这里的类型为ListingPlan的对象:
public class ListingPlan
{
public int? ListingPlanID { get; set; }
public int DescriptionLinesCount { get; set; }
public List<Directory> Directories { get; set; }
}
对象目录如下所示:
public class Directory
{
public int DirectoryID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
我有一个控制器,它将一个ListingPlanEditorViewModel返回给视图:
public ActionResult ConfigurePlan(int? listingIdentifier)
{
ListingPlan plan = new ListingPlan()
{
DescriptionLinesCount = 10,
Directories = new List<Directory>()
{
new Directory()
{
DirectoryID = 3
},
new Directory()
{
DirectoryID = 4
}
}
};
ListingPlanEditorViewModel model = new ListingPlanEditorViewModel()
{
Plan = plan,//_listingRepository.GetListingPlan(listingIdentifier, null),
SiteDirectories = _database.GetDirectories()
};
return View(model);
}
我想创建一个多选框,它将选定的值绑定到ListingPlanEditorViewModel中的Plan属性,为每个选择设置DirectoryID属性。所以在绑定后我应该有一个Directory对象列表。全部都有他们的DirectoryID设置。
我在做这件事时遇到了一些麻烦。我可以使用正确的选择选项创建多选框,但我无法在我的帖子操作中检索它们,如下所示:
@using (Html.BeginForm("ConfigurePlan", "ListingPlan"))
{
<div class="form-body">
@Html.ListBoxFor(model => model.Plan.Directories, new MultiSelectList(Model.SiteDirectories, "DirectoryID", "Name"))
</div>
<button type="submit">submit</button>
}
答案 0 :(得分:2)
您必须在ViewModel中创建[]
或List
IDs
来存储选定的值。
public class ListingPlanEditorViewModel
{
public ListingPlan Plan { get; set; }
public IEnumerable<Directory> SiteDirectories { get; set; }
public int[] DirectoryIDs {get;set;}
}
视图将改变。所选目录将存储在DirectoryIDs
。
@using (Html.BeginForm("ConfigurePlan", "ListingPlan"))
{
<div class="form-body">
@Html.ListBoxFor(model => model.DirectoryIDs, new MultiSelectList(Model.SiteDirectories, "DirectoryID", "Name"))
</div>
<button type="submit">submit</button>
}
现在在POST
操作上,您可以查询数据库并获取用户选择的Directories
。
注意:您无法获得完整对象,因为ListBoxFor
会生成一个<select multiple ... > ... </select>
标记赢得&#39;知道如何绑定到你的对象。