【问题标题】:Pass Text Value of cascading dropdown list item web controller传递级联下拉列表项 Web 控制器的文本值
【发布时间】:2018-11-02 19:08:17
【问题描述】:

我有一个 MVC Web 表单,其中包含几个文本框字段和两个下拉列表。我正在尝试将下拉列表的文本值传递回我的控制器以在方法中使用。第一个下拉列表用于位置,取决于第二个下拉列表(用于安全组)。

我遇到的唯一问题是 userDn 的变量 (var) 值,我试图传入第一个下拉列表项的位置名称或“文本”值,但它将位置值设置为开关与下拉列表项关联的案例编号:

示例: 姓名:一些 姓氏:姓名 位置:Temecula(开关盒编号 7)

当前返回:“CN=Some Name,OU=7,OU=Some OU,DC=xxx,DC=com

应该返回:“CN=Some Name,OU=Location Name,OU=Some OU,DC=xxx,DC=com

我是否在我的 javascript 中缺少一个函数,该函数将返回我的第一个下拉列表的 Text 值而不是 switch case 编号?任何建议将不胜感激!

public ActionResult AddUserToGroup()
    {
        var model = new CreateUser();
        List<SelectListItem> li = new List<SelectListItem>();
        li.Add(new SelectListItem { Text = "Select", Value = "0" });
        li.Add(new SelectListItem { Text = "Des Moines", Value = "1" });
        li.Add(new SelectListItem { Text = "Fort Worth", Value = "2" });
        li.Add(new SelectListItem { Text = "Kansas City", Value = "3" });
        li.Add(new SelectListItem { Text = "Marysville", Value = "4" });
        li.Add(new SelectListItem { Text = "South Hack", Value = "5" });
        li.Add(new SelectListItem { Text = "St Clair", Value = "6" });
        li.Add(new SelectListItem { Text = "Temecula", Value = "7" });
        ViewData["location"] = li;

        return View(model);
    }


public JsonResult GetGroups(string id)
    {
        List<SelectListItem> groups = new List<SelectListItem>();
        switch (id)
        {
            case "1":
                groups.Add(new SelectListItem { Text = "Select", Value = "0" });
                groups.Add(new SelectListItem { Text = "DM Genetec 24-7 No Act", Value = "1" });
                groups.Add(new SelectListItem { Text = "DM Genetec Admin", Value = "2" });
                groups.Add(new SelectListItem { Text = "DM Genetec ExtAct-Front", Value = "3" });
                groups.Add(new SelectListItem { Text = "DM Genetec ExtAct-Ship", Value = "4" });
                groups.Add(new SelectListItem { Text = "DM Genetec ExtAct-Ship", Value = "5" });
                groups.Add(new SelectListItem { Text = "DM Genetec Front Door Inner", Value = "6" });
                break;
        }
        return Json(new SelectList(groups, "Value", "Text"));
     }

    [HttpPost]
    public ActionResult AddUserToGroup(CreateUser model)
    {
        var group = model.Group;
        var location = model.Location;
        var groupDn = "CN=" + group + ",OU=Groups,DC=xxx,DC=com";
        var user = model.FirstName + " " + model.LastName;
        var userDn = "CN=" + user + ",OU=" + location + ",OU=Some OU,DC=xxx,DC=com";

        try
        {
            DirectoryEntry entry = new DirectoryEntry("LDAP://" + groupDn);
            entry.Properties["member"].Add(userDn);
            entry.CommitChanges();
            entry.Close();
        }
        catch(System.DirectoryServices.DirectoryServicesCOMException E)
        {
            ModelState.AddModelError("", "Exception adding cool user to additional group" + E);
        }
        var newUserAddition = model.FirstName + " " + model.LastName;
        var newGroupAddition = model.Group;

        return RedirectToAction("CompletedUserToGroup", "Users", new { someNewUserAddition = newUserAddition, someNewGroupAddition = newGroupAddition });
    }

--下面是我认为的javascript--

<script type="text/javascript">
$(document).ready(function () {   
    $("#Location").change(function () {
        $("#Group").empty();
        $.ajax({
            type: 'POST',
            url: '@Url.Action("GetGroups")',
            dataType: 'json',
            data: { id: $("#Location").val(), Text: $("#Location").val() },
            success: function (groups) {
                $.each(groups, function (i, group) {
                   // $("#Group").append('<option value="' + group.Value + '">' + group.Text + '</option>');
                    $("#Group").append('<option value="' + group.Text + '">' + group.Text + '</option>');
                });
            },
            error: function (ex) {
                alert('Failed to retrieve states.' + ex);
            }
        });
        return false;
    })
});

【问题讨论】:

  • 使ValueText 相同,而不是数字。
  • 我试过了,但它看起来像位置值,它传递了我选择的任何位置项的案例编号(开关)。我不知道这是否有助于更清楚地说明这一点。
  • 当表单被提交时,它会发送选择的选项值(如果存在)。将值更改为与文本相同,它将向您发送文本。 new SelectListItem { Text = "DM Genetec ExtAct-Front", Value = "DM Genetec ExtAct-Front" }

标签: javascript c# asp.net-mvc cascadingdropdown


【解决方案1】:

我想出了如何传递值,它看起来很笨拙但它有效,在我的 POST ActionResult 中,我在初始化 var location 后添加了以下(var locationValue),然后我将 var userDn 更改为:“CN =” + user + ",OU=" + locationValue + ",OU=Some OU,DC=xxx,DC=com":

        var locationValue = "";
        if (location == "1")
        {
            locationValue = "Des Moines";
        }
        else if (location == "2")
        {
            locationValue = "Fort Worth";
        }
        else if (location == "3")
        {
            locationValue = "Kansas City";
        }
        else if (location == "4")
        {
            locationValue = "Marysville";
        }
        else if (location == "5")
        {
            locationValue = "South Hack";
        }
        else if (location == "6")
        {
            locationValue = "St Clair";
        }
        else if (location == "7")
        {
            locationValue = "Temecula";
        }

【讨论】:

    【解决方案2】:

    如果您不关心整数值,则将Value 更改为与Text 相同。

    new SelectListItem { Text = "Des Moines", Value = "Des Moines" }
    

    如果不想更改Value,则可以从选中的子&lt;option&gt;获取文本标签。

    $("#Location option:selected").text()
    

    $("#Location").val() 的值是自动的,但文本需要找到正确的子选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      相关资源
      最近更新 更多