powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как передать в контроллер выбранное значение из DropDownListFor(...) ?
5 сообщений из 5, страница 1 из 1
Как передать в контроллер выбранное значение из DropDownListFor(...) ?
    #39664600
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По кривому я могу это делать через скрипт и дополнительный элемент типа HiddenBox (DDFor ---> script ---> HiddenBox ---> контроллер). А как нибудь нормальным образом без этой цепочки - у меня не получается!
Простейшая програмка:
Контроллер:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace InclusiveClass.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            List<City> cityList = new List<City>();
            cityList.Add(new City { Id=1, Name="Псков"});
            cityList.Add(new City { Id=2, Name="Москва"});
            cityList.Add(new City { Id=3, Name="Саратов"});
            cityList.Add(new City { Id=4, Name="Вологда"});

            CityListClass mod = new Controllers.CityListClass();
            mod.CityList = cityList;
            return View(mod);
        }

        [HttpPost]
        //public ActionResult Index1(CityListClass mod)     // Пусто! Что поставить???
        public ActionResult Index1(int? Id)                 // Пусто!   Что поставить???
        {
            return View("Index", "Пока неважно 123");
        }
    }

    public class City
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class CityListClass
    {
        public List<City> CityList { get; set; }
    }
}



Предсталение:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@model InclusiveClass.Controllers.CityListClass

@{
    ViewBag.Title = "Index";
}

<div class="container">
    <h2>Комплексный класс</h2>
    @using (Html.BeginForm("Index1", "Home", FormMethod.Post))
    {
        <div>@Html.DropDownListFor(mod => mod.CityList, new SelectList(@Model.CityList, "Id", "Name"))</div>
        <input type="submit" value="Сохранить" style="margin-top: 5px;" />

    }
</div>



Выпадающий список прекрасно отображается, однако, при нажатии на кнопку в аргумент контроллера Index1 ничего не попадает.
В чём причина?
С уважением ВВГ
...
Рейтинг: 0 / 0
Как передать в контроллер выбранное значение из DropDownListFor(...) ?
    #39664607
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer,
Пошарил ещё в интернете - как оказывается, проблема-то застарелая!
...
Рейтинг: 0 / 0
Как передать в контроллер выбранное значение из DropDownListFor(...) ?
    #39664623
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGerпроблема-то застарелая!

Так и живём.
...
Рейтинг: 0 / 0
Как передать в контроллер выбранное значение из DropDownListFor(...) ?
    #39664653
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,

Прилёг после обеда подремать и во сне пришло решение проблемы. Оно простое и связано с Html-раcширением всех элементов ...For(...).
Простейший пример:
@Html.TextBoxFor(x => x.Id, htmlAttributes: new { id="idTextBox"}) - превращается в следующий код:
<input data-val="true" ... id="idTextBox" name="Id" type="text" value="2" /> - (часть параметров опущена)

Чтобы контроллер воспринял эту информацию в списке аргументов его метода должно в точности написанное имя name="Id" (Это общеизвестно, но иногда забывается ;-( )
Код: c#
1.
2.
3.
4.
5.
6.
[HttpPost]
public ActionResult Index1(int? Id)
{
   .................................
   return View(....);
}



С учётом сказанного модифицируем классы, контроллер и представление:
Класс City - без изменений
Класс CityListClass дополняем свойством Id, которое и будет принимать информацию об идентификаторе выбранного элемента списка
Код: c#
1.
2.
3.
4.
5.
    public class CityListClass
    {
        public int Id { get; set; }     // Приём выбранного элемента списка
        public List<City> CityList { get; set; }
    }



В соответствии со сказанным выше модифицируем представление mod => mod.Id . Ошибка состояла в том, что ранее мы пытались передать в контроллер весь список - это неправильно!
Теперь после модификации:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@model InclusiveClass.Controllers.CityListClass

@{
    ViewBag.Title = "Index";
}

<div class="container">
    <h2>Комплексный класс</h2>
    @using (Html.BeginForm("Index1", "Home", FormMethod.Post))
    {
        <div>@Html.DropDownListFor(mod => mod.Id, new SelectList(@Model.CityList, "Id", "Name"))</div>
        <input type="submit" value="Сохранить" style="margin-top: 5px;" />

    }
</div>



Теперь всё работает нормально - после нажатия на кнопку в аргументе метода контроллера Index1 получаем идентификатор выбранного элемента (см. рисунок).
...
Рейтинг: 0 / 0
Как передать в контроллер выбранное значение из DropDownListFor(...) ?
    #39664675
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer,

Перед тем, как пользоваться хелперами - поймите, как это в принципе работает. Я про http-запросы, передачу параметров и прочее
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как передать в контроллер выбранное значение из DropDownListFor(...) ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]