保存多个选定值的DropDownList



如何保存多个DropDownListFor的数据?我有这个代码,但所选项目没有到达控制器。

我的代码视图:

@Html.DropDownListFor(model => model.Ingredients, new SelectList(Model.ListIngredients, "Id", "Description"), "Select the ingredients", new { multiple = "multiple", })

我的型号:

public ICollection<Ingredient> Ingredients { get; set; }
public ICollection<Ingredient> ListIngredients{ get; set; }

成分:

public string Description { get; set; }
public int Id { get; set; }

我必须更改助手的名称和id才能保存数据?

您正试图将选定的值绑定到Ingredients集合中。然而,如果你看一下发布的值,它们会看起来像这样:

。。。成分=1&成分=2…

这意味着模型绑定器将不知道如何将1,2(即成分Id)等值转换为成分类的实例。


您需要更改视图模型的属性,在该属性中您将获得用户选择的成分,因此,不需要一组成分:

public ICollection<Ingredient> Ingredients { get; set; }

您有一个Id集合(这是您用作多选值的属性),例如:

public int[] SelectedIngredients { get; set; }

(我已经重新命名了这处房产,但这不是严格需要的,我这样做只是为了清楚起见)

作为一个建议,我会从多选中删除默认选项值("选择成分"选项),并使用标签或工具提示。否则,它可能看起来像列表中的任何其他值,您将不得不处理用户选择该选项的情况,而该选项不是有效成分。

更好的是,我还将使用@Model.ListBoxFor助手,因为这将让每个人都知道他们正在处理多选。否则(使用下拉助手),除非查看属性,否则您可能不会意识到它是一个多选。类似于:

@Html.ListBoxFor(m=>m.SelectedIngredients, new SelectList(Model.ListIngredients, "Id", "Description"))

当然,这些只是建议。如果它们不适用于您的要求,您可以很高兴地忽略它们!

作为最后的注释,可以将发布的值转换为视图模型中最初的Ingredient对象。这将需要您编写自己的模型活页夹,并将其配置为Ingredient类型。然而,您将只收到发布值中的id,因此您必须检索其他属性(可能来自数据库),或者您将有一个Ingredient对象集合,其中只填充id。除非你真的需要,否则我不会走这条路

相关内容

  • 没有找到相关文章

最新更新