Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/31: Рейтинг темы: голосов - 31, средняя оценка - 4.87
5 / 5 / 0
Регистрация: 11.09.2016
Сообщений: 74
1

ASP.NET CORE передача на сервер списка объектов

03.01.2018, 21:26. Показов 5620. Ответов 2

Author24 — интернет-сервис помощи студентам
Делаю форму создания товара. Собственно в форму передается список всех категорий, чтобы пользователь мог выбрать 1 или несколько для нового товара.

Часть кода модели:
C#
1
2
3
4
5
6
7
8
public class CreateProductViewModel
    {
      public decima Price {get;set;}
      public string Name {get;set;}
       ...
       [Required(ErrorMessage = "Выберите категорию")]
       public List<Category> Categories { get; set; }
     }
Форма во вьюшке:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@{
var allCategories = Model.Categories.ToList();
}
 
<form method="post" valign="top" align="left" style="padding-left:200px" asp-action="CreateProduct" asp-controller="Home">
 <label asp-for="SelectedCategories">Выберите категорию:</label><br />
    <select asp-for="Categories" name="Categories" style="width:340px;" multiple="multiple" >
        <option value="null">Корневая</option>
        @foreach (Category item in allCategories) //динамически создаем список
            {
                <option value="@item">@item.Name</option>
            }
    </select>
</form>
Код контроллера:
C#
1
2
3
4
5
6
7
8
9
10
        [HttpPost]
        public IActionResult CreateProduct(CreateProductViewModel product)
        {
            if (ModelState.IsValid)               
                return Content($"все хорошо");
            else
            {
                return Content($"все плохо...");
            }
        }
Вопроса два:
1. В контроллер ничего не приходит. Т.е. product.Categories - нуль значений.
В Request.Form["Categories"] - есть значения, но они типа стринг. {MyApp.Models.Category, ...}. Не понятно а как же передать в контроллер тогда сложный тип вместо стринг?
2. Динамически созданый список - при создании все значения в списке выделены, так как будто им пописат атрибут selected. Не выбраным остается только "корневая" категория со значением null. При выборе элемента в ручную, выделяется только выбраный, все остальные элементы сбрасывают выделение. Вопрос в том как убрать этот эффект при создании? что-то вроде selected="false", что нибкдь еще? я еще в тегхелперах не сильно разобрался...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2018, 21:26
Ответы с готовыми решениями:

ASP.NET Core. Передача данных на сервер без перезагрузки страницы
Разбираюсь с асп. Делаю онлайн стор. Есть вьюшка - список товаров с ссылкой &quot;добавить в корзину&quot;....

ASP.NET Core. Старт - что нужно знать, чтобы стать ASP.NET Core разработчиком?
Попалось хор краткое обзорное видео 2016 года с таким названием - Что нужно знать, чтобы стать...

Разница между ASP.NET Core 2, ASP.NET Core MVC, ASP.NET MVC 5 и ASP.NET WEBAPI 2
Здравствуйте. Я в бекенд разработке полный ноль. В чем разница между вышеперечисленными...

ASP.NET Core MVC - Создание коллекций объектов
Здравствуйте всем! Я начинающий веб разработчик. Опыт минимальный, написал несколько простых...

2
Эксперт .NET
12079 / 8388 / 1281
Регистрация: 21.01.2016
Сообщений: 31,601
04.01.2018, 07:45 2
rooten, в select нельзя поместить "сложный тип". Общепринятый подход - помещать в данное поле идентификаторы (ID) по которым на сервере восстанавливать коллекцию (если надо). Вы сами по сайтам полазьте, да посмотрите (Ctrl+U), что в select заталкивают (там, где нет JS-фреймворков).
1
338 / 327 / 154
Регистрация: 29.10.2012
Сообщений: 949
06.01.2018, 01:30 3
Предлагаю вот такой вариант:
Модели:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class CreateProductViewModel
{
    public int CreateProductViewModelId { get; set; }
    public double Price { get; set; }
    public string Name { get; set; }
    [Required(ErrorMessage = "Выберите категорию")]
    public string Categories { get; set; }
}
 
public class Category
{
    public int CategoryId { get; set; }
    public string Name { get; set; }
}
Контроллер (для примера):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public ActionResult Create()
{
    List<Category> cat = new List<Category>();
    cat.Add(new Category { CategoryId = 0, Name = "Выберите категорию" });
    cat.Add(new Category { CategoryId = 1, Name = "Столы" });
    cat.Add(new Category { CategoryId = 2, Name = "Стулья" });
 
    CreateProductViewModel cpvm = new CreateProductViewModel { Categories = "" };
    List<SelectListItem> Categories = new List<SelectListItem>();
    foreach (var item in cat)
    {
        if (item.CategoryId == 0)
            Categories.Add(new SelectListItem { Text = item.Name, Value = string.Empty, Selected = true });
        else
            Categories.Add(new SelectListItem { Text = item.Name, Value = item.CategoryId.ToString()});
    }
    ViewBag.Categories = Categories;
    return View(cpvm);
}
Представление (классы были сгенерированы автоматически VS):
HTML5
1
2
3
4
5
6
7
...
<div class="col-md-10">
    @Html.DropDownListFor(model => model.Categories,
                    new SelectList(ViewBag.Categories, "Value", "Text"), new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.Categories, "", new { @class = "text-danger" })
</div>
...
Один скриншот при включенных скриптах, второй при выключенных.
Миниатюры
ASP.NET CORE передача на сервер списка объектов   ASP.NET CORE передача на сервер списка объектов  
1
06.01.2018, 01:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2018, 01:30
Помогаю со студенческими работами здесь

Какая разница между ASP .Net Core и ASP .Net Core MVC?
Какая разница между ASP .Net Core и ASP .Net Core MVC? Или я может что-то не так понял? И...

ASP.NET Core: разный формат даты контроллера ASP.NET и AngularJS
Собственно, проблему пока еще не разруливал, но уже погуглил. Разный формат даты который использует...

ASP.NET MVC или ASP.NET Core
Добрый вечер, подскажите что лучшие изучать ASP.NET MVC или ASP.NET Core ? Как я понимаю ASP.NET...

Что выбрать ASP.NET или ASP.NET Core ?
Добрый день форумчане, хотелось бы услышать ваше мнение, какой из перечисленных фреймворков лучше...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru