gpt4 book ai didi

asp.net-mvc - 如何使用 asp.net mvc 3 和 ListBoxFor 显示多个选择?

转载 作者:行者123 更新时间:2023-12-04 10:05:15 25 4
gpt4 key购买 nike

我有这个虚拟机属性

  public IList<Guid> SelectedEligiableCategories { get; set; }
public IList<SelectListItem> EligiableCategories { get; set; }

我认为我有这个 helper
  @Html.LabelFor(x => x.EligibleCategoryFrmVm.SelectedEligiableCategories, "Eligible Categories:")
@Html.ListBoxFor(x => Model.EligibleCategoryFrmVm.SelectedEligiableCategories, Model.EligibleCategoryFrmVm.EligiableCategories, new { @class = "eligibleCategoryListBox" })

我的 Controller 中有这段代码
  List<SelectListItem> eligibleCategoriesListItems = Mapper.Map<List<EligibleCategory>, List<SelectListItem>>(eligibleCategories);
foreach (var rewardTier in creditCard.RewardTiers)
{
CbRewardTierFrmVm rewardTierFrmVm = new CbRewardTierFrmVm();
rewardTierFrmVm.EligibleCategoryFrmVm.EligiableCategories = eligibleCategoriesListItems;

foreach (var ec in rewardTier.EligibleCategories)
{
rewardTierFrmVm.EligibleCategoryFrmVm.SelectedEligiableCategories.Add(ec.Id);
}

vm.CbRewardTierFrmVm.Add(rewardTierFrmVm);
}

然而,当我加载我的 View 时。我的 ListBox 没有任何值被选中。我不确定为什么。如果这是一个 selectList,这将起作用,因为它将 SelectedEligiableCategories 与列表中的值匹配。

我不确定这是否是因为有多个选择

编辑
<select name="CbRewardTierFrmVm[63b504c0-0f9a-47ba-a8ff-db85f48d5f0f].EligibleCategoryFrmVm.SelectedEligiableCategories" multiple="multiple" id="CbRewardTierFrmVm_63b504c0-0f9a-47ba-a8ff-db85f48d5f0f__EligibleCategoryFrmVm_SelectedEligiableCategories" data-val-required="Must choose at least one eligible category." data-val="true" class="eligibleCategoryListBox ui-wizard-content ui-helper-reset ui-state-default" style="display: none;">
<option value="ed2bb5f9-4565-4f69-ab15-9fca011c0692">Gas</option>
</select>

您认为这是因为我使用的是 http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ 吗?

编辑2

我继续做一个例子。我一定错过了一些东西(不确定是什么)。当我使用“Darin Dimitrov”时,它可以工作。

我将示例切换到下拉列表,因为我也遇到了同样的问题。

在这个例子中,我没有使用 View 模型,因为我最初的假设是不知何故,我从 Steven Sanders 那里使用的助手可能会影响它,所以我要离开他的例子。

这似乎不是这种情况,因为我删除了它并且仍然遇到这个问题。
  public class Gift
{
public string Name { get; set; }
public double Price { get; set; }
public string SelectedItem { get; set; }
public IList<SelectListItem> Items { get; set; }
}


public ActionResult Index()
{
List<SelectListItem> items = new List<SelectListItem>
{

new SelectListItem {Value = "",Text ="--"},
new SelectListItem {Value = "1",Text ="1"},
new SelectListItem {Value = "2",Text ="2"},
};


var initialData = new[] {
new Gift { Name = "Tall Hat", Price = 39.95, Items = items, SelectedItem = "2" },
new Gift { Name = "Long Cloak", Price = 120.00, Items = items, SelectedItem = "1" }
};

return View("Index3",initialData);
}

@model IList<EditorDemo.Models.Gift>

@{
ViewBag.Title = "Index3";
}

@for (int i = 0; i < Model.Count; i++)
{
@Html.DropDownListFor(x => x[i].SelectedItem, new SelectList(Model[i].Items, "Value", "Text"))
}

当您将其放入 forloop 并尝试创建多个下拉列表时,它似乎无法处理。

最佳答案

以下对我有用。

模型:

public class MyViewModel
{
public IList<Guid> SelectedEligiableCategories { get; set; }
public IList<SelectListItem> EligiableCategories { get; set; }
}

Controller :
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
SelectedEligiableCategories = new[]
{
// preselect the second and the fourth item
new Guid("35830042-3556-11E1-BCDC-A6184924019B"),
new Guid("4253876A-3556-11E1-BC17-B7184924019B")
}.ToList(),

EligiableCategories = new[]
{
new SelectListItem { Value = "2DA62E3A-3556-11E1-8A0A-9B184924019B", Text = "item 1" },
new SelectListItem { Value = "35830042-3556-11E1-BCDC-A6184924019B", Text = "item 2" },
new SelectListItem { Value = "3D07EBAC-3556-11E1-8943-B6184924019B", Text = "item 3" },
new SelectListItem { Value = "4253876A-3556-11E1-BC17-B7184924019B", Text = "item 4" },
}
};
return View(model);
}
}

看法:
@model MyViewModel

@using (Html.BeginForm())
{
@Html.ListBoxFor(
x => x.SelectedEligiableCategories,
Model.EligiableCategories,
new { @class = "eligibleCategoryListBox" }
)
}

结果:

enter image description here

更新:

现在您已经展示了一个可以说明问题的示例,您可以在构建 SelectList 时指定所选项目。 :
@Html.DropDownListFor(
x => x[i].SelectedItem,
new SelectList(Model[i].Items, "Value", "Text", Model[i].SelectedItem)
)

未预选值的原因是因为您将下拉列表绑定(bind)到属性列表 ( x => x[i].SelectedItem),而在我的示例中,我使用的是简单属性。

如果您想使用 ListBoxFor 助手执行此操作,您可以使用以下内容:
@Html.ListBoxFor(
x => x[i].SelectedItems,
new MultiSelectList(Model[i].Items, "Value", "Text", Model[i].SelectedItems)
)
SelectedItems属性变成一个集合,我们使用 MultiSelectList而不是 SelectList .

关于asp.net-mvc - 如何使用 asp.net mvc 3 和 ListBoxFor 显示多个选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696358/

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