При создании двойного выпадающего списка SelectList с JQuery на POST возвращает 0. ASP.Net CORE 2.1 - PullRequest
0 голосов
/ 19 ноября 2018

Я создал два выпадающих списка, один из которых действует как фильтр для другого.Таким образом, с раскрывающимся списком Customer выбирается клиент, и в раскрывающемся списке ClientUser отображается только ограниченный набор ClientUsers.Я использую функцию Jquery, чтобы это произошло.

Выбор работает превосходно, но когда я отправляю POST, форма ClientUser устанавливается на 0, а не на выбор.

enter image description here

Представление выглядит следующим образом (упрощено для удобства чтения):

@model DropDownTester2.Models.CaseViewModel

 <form asp-action="Maak">
     <label asp-for="CaseTitle" class="control-label"></label>
     <input asp-for="CaseTitle" class="form-control" />

     <select id="customerId" asp-for="CustomerId" asp-items='@(new SelectList(ViewBag.customers, "CustomerId", "CompanyName"))'>
          <option>Select Customer Name</option>
      </select>

      <select id="clientUserId" asp-for="ClientUserId" asp-items='@(new SelectList(string.Empty, "ClientUserId", "LastName"))'>
      </select>

      <input type="submit" value="Maak" class="btn btn-default" />
 </form> 

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}

    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script type="text/javascript">
        $(function () {
        $("#customerId").change(function () {

            var url = '@Url.Content("~/")' + "Case/getClientUserById";

            var ddlsource = "#customerId";

            $.getJSON(url, { id: $(ddlsource).val() }, function (data) {
            //$.getJSON("@Url.Action("getClientUserById","Case")", { id: $(ddlsource).val() }, function (data) {
                var items = '';
                $("#clientUserId").empty();
                $.each(data, function (i, row) {
                    items += "<option value='" + row.value + "'>" + row.text + "</option>";
                });
                $("#clientUserId").html(items);

            })
        });
    });

    </script>
}

CaseViewModel:

public class CaseViewModel
{
    public int CaseId { get; set; }
    public string CaseTitle { get; set; }
    public int CustomerId { get; set; }
    public int ClientUserId { get; set; }

    public IEnumerable<Customer> CustomerList { get; set; }       
    public IEnumerable<ClientUser> ClientUserList {get; set;}

Моя модель для Case:

public class Case
{
    public int CaseId { get; set; }
    public string CaseTitle { get; set; }
    public string CaseRoleDescription { get; set; }
    public int CustomerId { get; set; }
    public int ClientUserId { get; set; }

    public virtual Customer Customer { get; set; }        
    public virtual ICollection<ClientUser> ClientUsers { get; set; }

}

Наконец, мои контроллеры:

// GET: Case/Maak
    public IActionResult Maak()
    {
        ViewBag.customers = _context.Customer.ToList(); 
        return View();
    }

    public JsonResult getClientUserById(int id)
    {
        List<ClientUser> list = new List<ClientUser>();
        list = _context.ClientUser.Where(c => c.Customer.CustomerId == id).ToList();
        list.Insert(0, new ClientUser { ClientUserId = 0, LastName = "Please select a clientuser" });
        return Json(new SelectList(list, "ClientUserId", "LastName"));
    }


    // POST: Case/Maak
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Maak(CaseViewModel model)
    {
        if (ModelState.IsValid)
        {
            var newCase = new Case
            {
                CaseId = model.CaseId,
                CaseTitle = model.CaseTitle,
                CustomerId = model.CustomerId,
                ClientUserId = model.ClientUserId
            };

            _context.Add(newCase);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        ViewData["CustomerId"] = new SelectList(_context.Set<Customer>(), "CustomerId", "CustomerId", model.CustomerId);
        return View(model);
    }

1 Ответ

0 голосов
/ 20 ноября 2018

Я не могу воспроизвести вашу проблему:

enter image description here

Разница в кодах состоит в том, что я создаю Customer / ClientUser вручную, но это не должноЭто может быть причиной проблемы:

    public class Customer {
       public int CustomerId { get; set; }

       public string CompanyName { get; set; }
    }

    public class ClientUser
    {
        public int ClientUserId { get; set; }

        public string LastName { get; set; }
    }

Вы можете выполнить поиск "ClientUserId" на своих страницах, чтобы проверить, сбрасывает ли другая функция значение.

В качестве обходного пути вы также можете:

  1. Создайте скрытый файл на своей странице и привяжите его к свойству модели, создайте функцию JavaScript события select change, чтобы установить значение на основе выбора.
  2. Используйте Jquery, чтобы получить выбранное мнениеиспользуйте Ajax для вызова функции действия и передачи значения в качестве параметра.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...