gpt4 book ai didi

c# - 将 listboxfor 发送到 Controller

转载 作者:太空宇宙 更新时间:2023-11-03 21:23:12 24 4
gpt4 key购买 nike

我的 View 中有一个包含列表框的表单。用户将值添加到列表框。

当用户按下“提交”按钮时,我希望列表框中的所有值都放在我的模型属性中,这是一个列表。

这是我认为的列表框:

 @Html.ListBoxFor(m => m.Ingredients, new List<Ingredient>(), new { @class = "form-control" , @id = "Ingredients"})

此行给出一个错误,即列表必须包含 SelectListItem。即使我更改为那个,并在我的 View 模型中更改它,它仍然不起作用。

这是我的 View 模型:

 public class RecipeModel
{
public int Id { get; set; }

public string Name { get; set; }

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

public string Description { get; set; }

public string ImageUrl { get; set; }

public List<RecipeModel> Recipes { get; set; }
}

这是我的 Controller :

[HttpPost]
public void SaveRecipe(RecipeModel model)
{
RecipeDb.SaveRecipe(Mapper.Map<Recipe>(model));
}

我想要的是在 Controller 中,我希望模型列表成分由 View 中列表框中的所有项目/值填充,但我无法弄清楚。

最佳答案

多选回传一组简单值(例如 [1, 4, 7]["Recipe 2", "Recipe 4"] 取决于所选选项的值)。您不能将 ListBoxFor 绑定(bind)到复杂对象的集合。您的 View 模型需要具有要绑定(bind)的属性。假设 typeof Ingredient 包含属性 int IDstring Name,那么您的 View 模型将类似于

public class RecipeViewModel
{
public int[] SelectedIngredients { get; set; }
public SelectList IngredientList { get; set; }
}

然后是 Controller

public ActionResult Create()
{
RecipeViewModel model = new RecipeViewModel();
// Populate the collection of available ingredients
model.IngredientList = new SelectList(db.Ingredients, "ID", "Name");
// if you want to pre select some options, then: model.SelectedIngredients = new int[] { 1, 4, 7 };
return View(model);
}

[HttpPost]
public ActionResult Create(RecipeViewModel model)
{
// model.SelectedIngredients will contain the ID's of the selected ingredients
}

在 View 中

@model RecipeViewModel
@using(Html.BeginForm())
{
....
@Html.ListBoxFor(m => m.SelectedIngredients, Model.IngredientList)
....
}

关于c# - 将 listboxfor 发送到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29214479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com