Передать текстовое значение элемента каскадного раскрывающегося списка веб-контроллера

У меня есть веб-форма MVC, которая содержит пару текстовых полей и два раскрывающихся списка. Я пытаюсь передать текстовые значения моего раскрывающегося списка обратно в мой контроллер для использования в методе. Первый раскрывающийся список предназначен для местоположения и зависит от второго раскрывающегося списка (для групп безопасности).

Единственная проблема, с которой я столкнулся, связана со значением переменной (var) для userDn. Я пытаюсь передать имя местоположения или значение «Текст» первого элемента раскрывающегося списка, но он устанавливает значение местоположения на номер случая переключения вместо этого связан с элементом раскрывающегося списка:

Пример: Имя: Некоторая Фамилия: Имя Местоположение: Темекула (переключите регистр номер 7)

в настоящее время возвращается: "CN=Some Name,OU=7,OU=Some OU,DC=xxx,DC=com

должно возвращать: "CN=Some Name,OU=Название местоположения,OU=Some 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;
    })
});


person CodeNewbie    schedule 02.11.2018    source источник
comment
Сделайте Value таким же, как Text вместо числа.   -  person Jasen    schedule 02.11.2018
comment
Я пробовал это, но похоже, что для значения местоположения передается номер дела (переключатель) любого элемента местоположения, который я выбираю. Я не знаю, поможет ли это сделать это более ясным.   -  person CodeNewbie    schedule 02.11.2018
comment
Когда форма будет отправлена, она отправит выбранное значение параметра, если оно существует. Измените значение на то же, что и текст, и он отправит вам текст. new SelectListItem { Text = "DM Genetec ExtAct-Front", Value = "DM Genetec ExtAct-Front" }   -  person Shyju    schedule 03.11.2018


Ответы (2)


Я понял, как передать значение, это кажется дерганым, но это работает, в моем POST ActionResult я добавил следующее (var locationValue) после инициализации var location, затем я изменил 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";
        }
person CodeNewbie    schedule 02.11.2018

Если вас не волнует целочисленное значение, измените Value так, чтобы оно совпадало с Text.

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

Если вы не хотите менять Value, вы можете получить текстовую метку от выбранного дочернего элемента <option>.

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

Значение из $("#Location").val() является автоматическим, но текст требует найти правильный дочерний параметр.

person Jasen    schedule 02.11.2018