传递级联下拉列表项Web控制器的文本值

时间:2018-11-02 19:08:17

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

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

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

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

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

应返回:“ CN =某些名称,OU = 位置名称,OU =某些OU,DC = xxx,DC = com

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

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;
    })
});

2 个答案:

答案 0 :(得分:0)

我想出了如何传递值,这看起来有些古怪,但是可以工作,在我的POST ActionResult中,我在初始化var位置后添加了以下内容(var locationValue),然后将var userDn更改为:“ CN =” + user +“,OU =” + locationValue +“,OU =一些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";
        }

答案 1 :(得分:0)

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

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

如果您不想更改Value,则可以从所选子项<option>获取文本标签。

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

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