gpt4 book ai didi

asp.net-mvc - 在我的 asp.net-mvc 页面中,为什么没有选择正确的下拉列表?

转载 作者:行者123 更新时间:2023-12-05 01:07:45 26 4
gpt4 key购买 nike

我有一个 asp.net-mvc 网站,但我遇到了一个问题,即未选择下拉列表中正确的选定项目。我的 Controller 操作中有以下代码(已简化以隔离问题):

public ActionResult MyAction()
{
var vm = GetVM();

var list = new List<INamed> {new NamedInfo() {Id = 1, Name = "Yes"}, new NamedInfo() {Id = 0, Name = "No"}};
vm.YesNoList = SelectListHelper.GenerateDropdownList(vm.IncludesWeekends ? 1 : 0, list);

return View(vm);
}

这是 GenerateDropdownList 的定义
    public static List<SelectListItem> GenerateDropdownList<T>(int id, IEnumerable<T> list) where T : INamed
{
List<SelectListItem> dropdown = list.Select(c => new SelectListItem
{
Selected = c.Id == id,
Text = c.ToString(),
Value = c.Id.ToString()
}).ToList();

return dropdown;
}

下面是我的 HTML View 中的代码:
 <% = Html.DropDownList("IncludesWeekends", Model.YesNoList, new { @id = "IncludesWeekends" })%>

我希望在我的示例中选择 No (当我在服务器端放置断点时它具有 Selected = true 但当我查看生成的 html 时,没有选择任何内容:
<select id="IncludesWeekends" class="autoComplete1" name="IncludesWeekends">
<option value="1">Yes</option>
<option value="0">No</option>
</select>

默认情况下选择"is",因为它是第一项。

关于我在这里做错了什么或可行的替代方案有什么建议吗?

最佳答案

Selected房产在SelectListItem大多没用(more about that in my answer here) .在大多数情况下,HTML 助手会忽略它。相反,在您的情况下,他们将查看以下值:

  • ModelState["IncludesWeekends"]
  • ViewData["IncludesWeekends"]
  • Model.IncludesWeekends

  • ...并将他们找到的任何值转换为 String ,然后将其用作所选值。

    您有一个 IncludesWeekends您的模型上的属性,因此它将执行以下操作:
    Model.IncludesWeekends.ToString()

    ...从您的代码来看,这将导致 True"或 "False"(因为它是 bool )。

    就您而言,您使用的是 c.Id.ToString()<option>下拉列表的值,并且由于助手不会在这些值(“1”/“0”)中找到它选择的字符串(“真”/“假”),它不会选择任何东西。

    解决方法:
  • (最简单的方法):接受使用“真”和“假”作为您的 <option>值而不是整数 ID。
  • (几乎一样简单但不是很干净的方式):设置 ViewData["IncludesWeekends"]到您想要选择的值(即 Id )。这是有效的,因为助手会在 Model.IncludesWeekends 之前查看它.
  • 使用 View 模型,其中您有一个 IncludesWeekendsId属性,然后使用它来生成下拉列表,而不是 IncludesWeekends :
    <%= Html.DropDownList("IncludesWeekendsId", Model.YesNoList) %>
    或者
    <%= Html.DropDownListFor(m => m.IncludesWeekendsId, Model.YesNoList) %>
    然后,从 View 返回时,翻译 IncludesWeekendsId回到模型上的正确值。

  • 在这种情况下,我可能会选择 1 如果我不是学究气的话。但解决方案 3 如果您必须为下拉项使用不同的值而不是转换为字符串的模型属性的值,则是解决此问题的一般且大部分是干净的方法。

    关于asp.net-mvc - 在我的 asp.net-mvc 页面中,为什么没有选择正确的下拉列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175210/

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