【问题标题】:if i select dropdown option 1 then i get another dropdown only one record如果我选择下拉选项 1,那么我会得到另一个下拉列表,只有一条记录
【发布时间】:2013-07-11 05:13:30
【问题描述】:

我有 2 个下拉菜单, 第一个是静态的'displayAnswer',第二个是'correctAnswer' 在这里我选择'displayAnswer'选项2然后我在'correctAnswer'我的第二个下拉列表中只得到1和2, 或者我选择 3,然后我在第二个下拉列表的“正确答案”中只得到 1、2 和 3, 或者我选择 4,然后在我的第二个下拉列表的“正确答案”中得到 1、2、3 和 4。 使用 Mvc Razor。
请帮帮我。

谢谢。

【问题讨论】:

  • 您可以从下拉列表中获取所选值(显示答案),并通过 viewbag 将该所选值绑定到另一个下拉列表(选择正确答案)
  • 您可以使用 viewbag 或 Session 将值传递给下一个下拉菜单
  • 请向我们展示代码 :) 到目前为止您尝试了什么?预期的行为是什么?
  • 不要使用 viewbag。这可以使用jQuery 来实现。总是展示你所做的事情,不要只是期待答案。

标签: asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

无论您是否使用ASP.NET MVC,都可以使用jQuery 来实现。这是实现您需要的一种方式,您可能还可以遵循其他解决方案,但这对我有用。

以下是我的代码示例,您可以对其进行修改以适应您的场景。在我的示例中,我将在添加新用户时与部门和单位合作。一个部门由不同的单位组成。因此,当从第一个下拉列表中选择一个部门时,该部门的所有单位都将显示在第二个下拉列表中。

让我从视图(页面)开始。它接受一个名为CreateUserViewModel 的视图模型。应始终使用视图模型,而不是通过您的域模型。

@model MyProject.ViewModels.Users.CreateUserViewModel

代表我的两个下拉菜单的 HTML 标记:

<tr>
     <td class="edit-label">Department <span class="required">*</span></td>
     <td>
          @Html.DropDownListFor(
               x => x.DepartmentId,
               new SelectList(Model.Departments, "Id", "Name", Model.DepartmentId),
               "-- Select --",
               new { id = "Departments" }
          )
          @Html.ValidationMessageFor(x => x.DepartmentId)
     </td>
</tr>
<tr>
     <td class="edit-label">Unit <span class="required">*</span></td>
     <td>
          @Html.DropDownListFor(
               x => x.UnitId,
               new SelectList(Model.Units, "Id", "Name", Model.UnitId),
               "-- Select --",
               new { id = "Units" }
          )
          @Html.ValidationMessageFor(x => x.UnitId)
     </td>
</tr>

我的CreateUserViewModel 班级(部分):

public class CreateUserViewModel
{
     public int DepartmentId { get; set; }

     public IEnumerable<Department> Departments { get; set; }

     public int UnitId { get; set; }

     public IEnumerable<Unit> Units { get; set; }
}

我的Department班级:

public class Department
{
     public int Id { get; set; }

     public string Name { get; set; }
}

我的Unit 班级:

public class Unit
{
     public int Id { get; set; }

     public string Name { get; set; }

     public int DepartmentId { get; set; }

     public virtual Department Department { get; set; }
}

第一次加载视图时,我填充了部门下拉列表,而单位下拉列表为空。

public ActionResult Create()
{
     CreateUserViewModel viewModel = new CreateUserViewModel
     {
          Departments = departmentService.GetAll(),
          Units = Enumerable.Empty<Unit>()
     };

     return View(viewModel);
}

回到我的视图(页面)我使用jQuery 填充我的第二个下拉列表:

<script>

     function resetDropDown(targetDropDown) {
          var items = '';
          items = '<option>-- Select --</option>';
          $(targetDropDown).empty();
          $(targetDropDown).html(items);
     }

     $(document).ready(function () {
          $("#Departments").change(function () {
               var url = '@Url.Action("GetUnitsByDepartmentId", "User")';
               var departmentId = $("#Departments").val();

               if (departmentId == '') {
                    resetDropDown($('#Units'));
                    return;
               }

               $.getJSON(url, { departmentId: departmentId }, function (data) {
                    $('#Units').empty();
                    var items = '<option>-- Select --</option>';

                    $.each(data, function (i, unit) {
                         items += "<option value='" + unit.Id + "'>" + unit.Name + "</option>";
                    });

                    $('#Units').html(items);
               });
          });
     });

</script>

在我的控制器中有一个操作方法可以将我的单位作为JSON 结果返回:

public ActionResult GetUnitsByDepartmentId(int departmentId)
{
     IEnumerable<Unit> units = unitService.GetUnitsByDepartmentId(departmentId);

     var displayedUnits = units.Select(x => new
     {
          Id = x.Id.ToString(),
          Name = x.Name
     });

     return Json(displayedUnits, JsonRequestBehavior.AllowGet);
}

此解决方案可能并不完美,但它会引导您朝着正确的方向前进。一切顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 2017-04-17
    • 1970-01-01
    • 2016-06-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多