【发布时间】:2016-04-16 16:27:39
【问题描述】:
我目前在 MVC 中的网站上工作,我创建了一个带有 DropDownListFor 的局部视图,每次在 DropDownListFor 中选择一个值时,它都会转到 HttpPost 并将值添加到列表中。我还有一个绑定到这个列表的 ListBoxFor。
我想要达到的目标:
每次使用 DropDownListFor 将新值添加到 List 时,它应该自动更新 ListBoxFor,以便将所选值添加到此 Listbox。我想知道实现这一目标的最佳方法是什么。
代码:
提交.cshtml:
<div class="create-ingredient">
@Html.Partial("_CreateIngredient")
</div>
<br/>
<div class="add-ingredient">
@Html.Partial("_AddIngredient")
</div>
<br/>
<div class="ingredient-listbox">
@Html.LabelFor(model => model.Ingredients,"Current Ingredients")
@Html.ListBoxFor(model => model.Ingredients, new MultiSelectList(Model.SelectedIngredients), new { style = "width:50%;" })
</div>
_AddIngredient.cshtml(部分视图):
@model Recepten.Models.IngredientSelectModel
@using (Ajax.BeginForm("AddIngredient", "Recipe", new AjaxOptions() { UpdateTargetId = "add-ingredient", HttpMethod = "Post" }))
{
@Html.LabelFor(model => model.Ingredients, "Add Ingredient")
@Html.DropDownListFor(model => model.SelectedIngredient, Model.Ingredients, "Select Ingredient", new { @onchange = "$(this).parents('form').submit();" })
}
添加成分:
[HttpPost]
public ActionResult AddIngredient(IngredientSelectModel ing)
{
ing.SelectedIngredients.Add(ing.SelectedIngredient);
return PartialView(ing);
}
成分选择模型:
public RecipeModel Recipe { get; set; }
public IEnumerable<SelectListItem> Ingredients { get; set; }
public int SelectedIngredient { get; set; }
public string addIngredient { get; set; }
public List<int> SelectedIngredients { get; set; }
public IngredientSelectModel()
{
SelectedIngredients = new List<int>();
}
感谢您的宝贵时间!
【问题讨论】:
-
我能问一下 JavaScript 和这个有什么关系吗?
-
我对 javascript 不是很熟悉,但我认为如果 dropdownlistfor 中有 onclick 事件来更新 listboxfor,则可以创建一个事件,因为我不确定我已经删除了标签
-
您需要 javascript 来处理下拉列表的更改事件,克隆所选选项并将其附加到列表框。但这不一定会提交回
Ingredients的值,除非在提交之前选择了每个选项。很难理解你想用这个实现什么。如果您想为食谱选择多种成分,那么这不是这样做的方法。您应该使用关联的复选框显示所有成分。 -
当您点击下拉列表中的一项时,它应该将其添加到列表和列表框并且可以重复,尝试将 onchange 事件添加到列表框,但没有成功
标签: asp.net ajax asp.net-mvc