【问题标题】:DropDown List LookUp from another dropdown not shows up来自另一个下拉列表的下拉列表查找未显示
【发布时间】:2018-03-23 04:14:04
【问题描述】:

我有 2 个 DropDownList,第一个是项目,第二个是用户。该项目没有直接的列用户,但有组列,并且在用户中也有组列。所以我的查询是这样的,

public ActionResult Create(string value){

      //This is to shows ProjectList In Dropdown
      var list = db.Projects.ToList().Select(x => x.Name);
      IEnumerable<string> ProjectName;
      ProjectName = list;
      ViewBag.ProjectName = ProjectName;


      // This is to show UsersList in Dropdown
      var group = db.Projects.Where(x => x.Name == value).Select(y => y.GroupDev).FirstOrDefault();
      string NameGroup = group;
      var listuser = db.UsersModels.ToList().Where(x => x.GroupName == NameGroup).Select(y => y.Email);
      IEnumerable<string> TaskUser;
      TaskUser = listuser;
      ViewBag.Users = TaskUser;


      return View();
}

所以我的工作流程将是这样的,首先我从下拉列表中选择项目名称,然后我将使用 JQuery 从我的 DrowpDon 中获取值,然后我根据项目名称选择组名。然后我创建 IEnumerable 以显示与 GroupName 匹配的所有用户。现在我不知道为什么它不起作用,是因为我的逻辑错误?还是我的 Jquery 错了? 这是我的 Jquery 来做到这一点,

$(document).ready(function () {
    $('#Project').change(function () {
        var self = $(this);
        var value = $('#Project option:selected').text();
        $.ajax({
            url: '/TaskModels/Create',
            data: {
                value: value
            },
            type: 'POST',


        });
    });
});

这是我的下拉菜单,

<div class="form-group">
            @Html.LabelFor(model => model.Project, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(m => m.Project, new SelectList(ViewBag.ProjectName, "Project"), "Pilih Project ")
                @Html.ValidationMessageFor(model => model.Project, "", new { @class = "text-danger" })
            </div>
        </div>
      <div class="form-group">
                @Html.LabelFor(model => model.User, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownListFor(m => m.User, new SelectList(ViewBag.Users, "User"), "Pilih User")
                    @Html.ValidationMessageFor(model => model.User, "", new { @class = "text-danger" })
                </div>
      </div>

我已经在我的脚本部分中添加了我的脚本,

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
   <script src="~/Custom_Script/DropDownListenere.js"></script>
}

任何人都可以在这里提供帮助吗?我假设这是因为我的 jquery,是因为我不熟悉那种语言。

【问题讨论】:

  • 您的 ajax 调用不会对您的 Create() 方法返回的视图执行任何操作。但无论如何,你的代码是不正确的。如何实现级联下拉列表参考this DotNetFiddle
  • 所以我不会在我的 ajax 中返回选定的选项?
  • 将以下内容添加到您的视图中 - &lt;div id="test"&gt;&lt;/div&gt; 然后将以下内容添加到 ajax - success: function(response) { $('#test').html(response); } - 然后您就会明白 :) 研究 DotNetFiddle
  • 它仍然无法正常工作,我需要的是 ajax 来返回我选择的值,仅此而已。也许我需要创建部分视图?因为一旦我为 IsDone 创建了复选框,并且当复选框被选中时,文本装饰将是直通的,并且在我使用局部视图之前,我需要在动态更改文本之前引用页面。
  • 学习小提琴中的代码!!!

标签: c# jquery asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

再创建一个动作(例如:GetUser()),它接受一个参数(选定的项目)并以 JSON 形式返回用户列表。然后将 Project Drop 的 change 事件更改为:

$(document).ready(function () {
$('#Project').change(function () {
    var self = $(this);
    var value = $('#Project option:selected').text();
    $.ajax({
        url: '/TaskModels/GetUser', //Call GetUser Action instead of Create.
        data: {
            value: value
        },
        type: 'POST',  
        success:function(data){    //add this success function
            $("#User").html(""); //To clear the existing options.
            data.forEach(function (user) { //Iterate through the output array (In this case list of user emails)

                $("#User").append($("<option></option>") //append options to User drop downs
                    .attr("value",user)
                    .text(user))
            })
        }
    });
  });
});

【讨论】:

  • 我需要在我的操作中使用 JsonResult 吗?因为当我使用其他东西时它仍然无法正常工作
  • hmm 嗨,你知道如何调试它吗?我在 GetUsers 方法中设置了断点,但它永远不会停在那里我想看看天气值是否为 null
  • 调试将照常进行。如果没有,您的 ajax 调用可能存在一些问题。如果您使用的是 chrome,能否请您打开 chrome 开发者工具并检查网络?
  • 我使用的是 firefox,但也有开发者工具。以及如何使用它进行调试?对不起,我还是很新。或者这可能是因为我没有传递一个 int id 和传递字符串?但我的 GroupName 是唯一键。
  • 在开发者工具中打开网络标签,然后点击下拉菜单中的任意选项。然后你的行动呼吁将在那里列出。请检查通话的状态
【解决方案2】:

U 可以使用 id GroupName 附加来自服务器响应的用户结果示例:$('#Project').change(function () { var self = $(this); var value = $('#Project option: selected').text(); $.ajax({ url: '/TaskModels/Create', data: { value: value }, type: 'POST', 成功: function (data) { $.each(items, function (i, item) { $('#mySelect').append($('', { value: item.id, text: item.username })); }); } }); });

【讨论】:

  • 这有点无意义,因为 OP 返回的是视图,而不是 json!
  • 这篇文章格式不正确,需要正确的标点符号和完整的句子。改正英文后,请把每行代码放在单独的一行,然后突出显示所有代码,然后点击类似{}的格式按钮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多