【问题标题】:SelectList values determined by previous SelectList ValuesSelectList 值由先前的 SelectList 值确定
【发布时间】:2018-11-19 15:46:43
【问题描述】:

要实现两个 selectLists,第二个依赖于第一个,我需要了解什么? 选择过滤引擎尺寸的品牌。这最终会返回 carDetails

public IActionResult Create()
{
      ViewData["MakeId"] = new SelectList(_context.Sport, "MakeId", "MakeName");
      ViewData["EngineId"] = new SelectList(_context.Venue, "EngineId", "EngineName");

      return View();
}

我研究了“where”功能,但看不出如何使其适用于这种情况。

视图当前使用“cshtml”(Razor)文件。内容示例如下:

  <div class="form-group">
                <label asp-for="MakeId." class="control-label"></label>
                <select asp-for="MakeId" class="form-control" asp-items="ViewBag.MakeId"></select>
  </div>

【问题讨论】:

  • 听起来您希望第一个选择列表的 onchange 事件根据第一个选择列表在第二个选择列表上标记为已选中。在 onchange 事件中,您可以执行所需的任何操作来确定应选择的第二个选择列表中的值(调用服务器/数据库以查询数据等)。
  • 您正在寻找级联下拉行为。参考这个How to create cascading drop-down list
  • 参考this DotNetFiddle实现级联下拉列表

标签: asp.net asp.net-mvc entity-framework


【解决方案1】:

您可以通过在页面加载时填充一个选择列表来做到这一点。然后,您可以允许用户选择您想要的内容,并在调用 javascript 函数的下拉列表中有一个 onChange()。

您现在可以使用 ajax 调用来调用控制器并获取数据以填充第二个下拉列表。

您的下拉列表的 HTML 应如下所示:

            <select class="form-control" data-val="true" id="AN ID" name="A NAME (NOT NEEDED)"></select>

在 ajax 调用的成功部分,您可以执行以下操作:

            //Create a markup for a select
            var markup = "<option Value='0'>Select option</option>";

            //Populate the markup
            for (var i = 0; i < result.length; i++) {
                markup += "<option Value=" + result[i].Value + ">" + result[i].Text + "</option>";
            }

            //Populate dropdown with value
            $("#//DROPDOWNLIST ID").html(markup).show();

这将允许您按顺序填充下拉列表

【讨论】:

  • 我已经编辑了问题以包含视图文件的一些示例。 cshtml文件还可以用这个方法吗?
  • @Unfitacorn 应该是的。因此,在您的第一次选择之后,只需使用 onClick 来调用 javascript 函数。按照我在该 ajax 的结果中向您展示的那样做,并像示例中一样填充下一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多