Форма, содержащая Multi Select Dropdown, не отправляющая данные формы на Сервер? - PullRequest
0 голосов
/ 23 января 2019

Мне нужна простая форма, которая содержит.

Первое поле: раскрывающийся список с режимом одиночного выбора.

Второе поле: раскрывающийся список с режимом множественного выбора.

Я создал viewModel для этого, когда мы отправляем форму на сервер, тогда этот viewMode будет получать данные, используя привязку модели MVC, но, к сожалению, это не сработает?

Код формы:

<h2><strong>New Customer Details Record</strong></h2>
<form action="~/CustomerCategoryRecorder/Create" method="post">
    <div class="form-group">
        <label>Customer</label>
        @Html.DropDownListFor(m => m.Customers, new SelectList(Model.Customers, "id", "name"), "Select Customer", new { @class = "form-control" })
    </div>

    <div class="form-group">
        <label>Category</label>
        @Html.DropDownListFor(m => m.Category, new MultiSelectList(Model.Categories, "id", "name"), "Select Customers Categories", new { multiple = "true", @class = "form-control"})
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

ViewModel:

public class CustomerIdAndCategoriesIdsViewModel
{
   public int CustomerId { get; set; }
   public int[] CategoriesIds { get; set; }
}

Метод действия.

// Using ViewModel.
[AllowAnonymous]
public ActionResult Create(CustomerIdAndMoviesIdsViewModel ids)
{
   return View();
}

// without ViewModel.
[AllowAnonymous]
public ActionResult Create(int CustomerId, int[] categoryIds)
{
   return View();
}

В обоих случаях метода действия данные параметра метода равны нулю.

Как это решить? Я буду очень благодарен .

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Ваши имена элементов формы Customers и Category. Но названия вашей модели разные:

public class CustomerIdAndCategoriesIdsViewModel
{
   public int CustomerId { get; set; }
   public int[] CategoriesIds { get; set; }
}

Это означает, что вы используете другую модель для отображения страницы, чем вы используете для получения итогового сообщения формы. Хотя это по своей сути не является недействительным, имена do должны совпадать. Когда связыватель модели получает свойства, называемые Customers и Category, он не может знать, как сопоставить их с другой моделью.

Обновите имена свойств вашей модели:

public class CustomerIdAndCategoriesIdsViewModel
{
   public int Customers { get; set; }
   public int[] Category { get; set; }
}

Возможно, вы неохотно делаете это, потому что теперь множественное число свойств некорректно. Что означает, что ваше название где-то вводит в заблуждение. Так что исправьте это название в обеих моделях.

По сути, какими бы ни были ваши имена элементов формы, какими бы ни были имена свойств вашей модели. Вот как связыватель модели отображает объявленные значения в свойствах модели.

0 голосов
/ 23 января 2019

Обновите вашу ViewModel, как показано ниже.

public class CustomerIdAndCategoriesIdsViewModel
{
   public int Customers { get; set; }
   public int[] Category { get; set; }
}

Добавьте действие Create и добавьте [HttpPost] аннотацию.

[AllowAnonymous]
[HttpPost]
public ActionResult Create(CustomerIdAndMoviesIdsViewModel ids)
{
   return View();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...