gpt4 book ai didi

asp.net-mvc - 为什么 ListBoxFor 不选择项目,而 ListBox 是?

转载 作者:行者123 更新时间:2023-12-03 09:09:57 25 4
gpt4 key购买 nike

我认为有以下代码:

<%= Html.ListBoxFor(c => c.Project.Categories,
new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

<%= Html.ListBox("MultiSelectList",
new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

唯一的区别是第一个助手是强类型的(ListBoxFor),和 无法显示所选项目 (1,2),即使项目出现在列表中,等等。更简单的 ListBox 按预期工作。

我显然在这里遗漏了一些东西。我可以使用第二种方法,但这确实困扰着我,我想弄清楚。

作为引用,我的模型是:
public class ProjectEditModel
{
public Project Project { get; set; }
public IEnumerable<Project> Projects { get; set; }
public IEnumerable<Client> Clients { get; set; }
public IEnumerable<Category> Categories { get; set; }
public IEnumerable<Tag> Tags { get; set; }
public ProjectSlide SelectedSlide { get; set; }
}

更新

我只是将 ListBox 名称更改为 Project.Categories(与我的模型匹配),现在无法选择该项目。
<%= Html.ListBox("Project.Categories",
new MultiSelectList(Model.Categories, "Id", "Name", new List<int> { 1, 2 }))%>

我显然不理解这里发生的魔法。

更新 2

好吧,这纯粹是命名,例如,这有效...
<%= Html.ListBox("Project_Tags",
new MultiSelectList(Model.Tags, "Id", "Name", Model.Project.Tags.Select(t => t.Id)))%>

...因为字段名称是 Project_Tags,而不是 Project.Tags,事实上,Tags 或 Project.Tags 以外的任何东西都可以使用。我不明白为什么这会导致问题(除了它与实体名称匹配之外),而且我在这方面还不够好,无法深入研究并找出答案。

最佳答案

我自己偶然发现了这个问题,最后我意识到问题出在命名约定上。

您不能将包含 SelectList 或 MultiSelectList 的 ViewBag 或 ViewData poperty 命名为与包含所选项目的属性模型相同的名称。至少在您使用 ListBoxFor 或 DropDownListFor 帮助器时不会。

下面是一个例子:

    public class Person
{
public List<int> Cars { get; set; }
}

[HttpGet]
public ActionResult Create()
{
//wont work
ViewBag.Cars = new SelectList(carsList, "CarId", "Name");

//will work due to different name than the property.
ViewBag.CarsList = new SelectList(carsList, "CarId", "Name");

return View();
}

//View
@Html.ListBoxFor(model => model.Cars, ViewBag.CarsList as SelectList)

我相信有很多其他方法可以做到这一点,但它解决了我的问题,希望它会帮助别人!

关于asp.net-mvc - 为什么 ListBoxFor 不选择项目,而 ListBox 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308846/

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