powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC запретить биндинг
8 сообщений из 8, страница 1 из 1
ASP.NET MVC запретить биндинг
    #38913584
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, вот такой есть метод

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public ActionResult RawBunts(SearchRawBuntsParams searchParams = null)
        {
            // если модель поиска не передана, то создаем новую
            if (!ModelState.IsValid || searchParams == null)
            {
                searchParams = new SearchRawBuntsParams() { DepTo = 2118 };
            }
            else
            // иначе фильтруем данные по параметрам поиска и передаем в модель
            {
                searchParams.Result = GetRawSteelFiltered(searchParams).ToList();
            }
            // передаем в модель вспомогательные справочники
            searchParams.Steels = GetDictionarySteels();
            searchParams.DepartmentsTo = GetDictionaryDepartmentsTo();
            return View(searchParams);
        }




Класс модели поиска

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class SearchRawBuntsParams
    {
        //параметр поиска - подразделение-адресат
        public int? DepTo { set; get; }
        //параметр поиска - марка стали
        public int? Steel { set; get; }
        //параметр поиска - начальная дата
        [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? Begin { set; get; }
        //параметр поиска - конечная дата
        [DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
        public DateTime? End { set; get; }
        // коллекция - результат поиска
        public ICollection<SteelRawUse> Result { set; get; }
        // вспомогательный справочник для выбора стали из списка в представлении
        public ICollection<Steel> Steels { set; get; }
        // вспомогательный справочник для выбора подразделения из списка в представлении
        public ICollection<Department> DepartmentsTo { set; get; }
    }




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

В Action-метод я закладывал идею, что если вызываем Action get-запросом, то его единственный параметр SearchRawBuntsParams searchParams будет равен null, и я его создаю и передаю во вьюху. Но это не так! Биндер сразу мне создает экземпляр SearchRawBuntsParams со всеми параметрами = null. Как его отучить от этого?
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38913755
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public ActionResult RawBunts()
        {
            return RawBunts(null);
        }

        [HttpPost]
        public ActionResult RawBunts(SearchRawBuntsParams searchParams)
        {
               .....
        }



Но хотелось бы 1 метод на все запросы
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38914037
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris,
Ну да, нужно два Action метода - один для Get, другой для Post. Для SearchRawBuntsParams экземпляр создается автоматически.
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38914086
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С другой стороны можно добавить в класс SearchRawBuntsParams поле bool IsSearch, которое будет false по-умолчанию, а при поиске ставить его в true и проверять в контроллере. Тогда только одного Get метода будет достаточно.
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38914167
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

тоже думал об этом, но костыльно как-то. Вроде бы по логике - почему биндер создает экземпляр, на основании чего? null же должен быть, ан нет.
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38915476
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisAxeleron,

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

на основании конструктора по умолчанию
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38915479
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrU,

без конструктора взлетит или будет эксепшн падать?
...
Рейтинг: 0 / 0
ASP.NET MVC запретить биндинг
    #38915489
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisбез конструктора взлетит или будет эксепшн падать?
Даже если явно конструктор в классе SearchRawBuntsParams не задан, будет создан новый экземпляр этого класса.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / ASP.NET MVC запретить биндинг
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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