|
управление сложностью
|
|
Теряются данные при передаче в контроллер28.03.2021, 16:13. Показов 5533. Ответов 17
Метки нет (Все метки)
Приветствую. Столкнулся вот с какой проблемкой. По какой-то причине теряется подчиненная коллекция у объекта.
Т.е. объект, у него есть "подчиненные объекты" (связь многие ко многим). При передаче из контроллера в представления эти данные передаются, а вот обратно, когда POST-запросом обратно возвращаются в контроллер, то по какой-то причине этих данных нет . В представлении
0
|
|
| 28.03.2021, 16:13 | |
|
Ответы с готовыми решениями:
17
Теряются байты при передаче по RS485 Теряются байты при передаче массива структур клиенту |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 28.03.2021, 16:48 | |
|
При обратной привязке (от клиента контролеру), если параметром метода контролера указан класс, то MVC создает экземпляр этого класса и делает сопоставление скалярных полей класса с параметрами Http.
Если нужно передать что-то "внутреннее", то либо JSON (если много), либо в параметрах метода контроллера следует указать "потроха" как обычные скаляры, а в его коде вложить их в класс самостоятельно
1
|
|
|
управление сложностью
|
||
| 28.03.2021, 18:22 [ТС] | ||
|
MsGuns, объясню ситуацию (в продолжение вот этой темы Тэги к статьям, или организация ралевантного контента)
Я что-то не могу корректно настроить работу с тегами. Как при изменении материала, проверять теги, т.е. какие добавили новые, какие удалили и т.п. Добавлено через 24 минуты У меня ошибка такая вылетает, когда пытаюсь редактировать статью:
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 28.03.2021, 19:42 | |
|
Прочитал еще раз Вашу ссылку. Если по сути, то понял так.
Есть две сущности: Master и Detail. Отношение один-ко-многим. Есть ситуация, когда добавляется новая сущность Detail к имеющейся сущности Master, и есть ситуация, когда уже имеющаяся сущность Detail имеющейся сущности Master просто изменяется. В первом случае нужен Insert, во втором Update. Проблема в том, как распознать из полученной от клиента посылки первое это или второе. Я правильно понял суть ? Добавлено через 23 минуты Теперь немного внести ясности в терминологию ![]() В частности, имеется в виду слово "тэг" (англ. "Tag") То, что в быту под этим словом понимается "бирка", например, для собаки или покойника в морге , "ярлык"-брендовая наклейка на бензобаке байка, "этикетка" на бутылке, "болтающийся конец", за который можно дергать, например, марионетку", и т.д.) в программировании понимается совсем иное. В HTML под этим словом понимается как некий объект вообще (link, script, style), так и элемент DOM, видимый или не видимый в окне браузера. "Тэг" здесь явно используется как объект, с которым можно взаимодействовать посредством JS либо внутренних ссылках одних объектов на другие. В издательском деле (в котором я дилетант из дилетантов) тоже используются "тэги", смысл которых для меня вроде кубических коней в вакууме. Ясно только, что это некоторые "идентификаторы", которые указывают на какие-то куски чего-то внутри тоже чего-то ![]() Что такое "тэги" в СУБД, для меня вообще полная абстракция Полагаю, что для "нативности" разработчик решил некоторую сущность предметной области (например "тема" или "ключевое слово/фраза") обозвать именно так. Но как эта таинственная сущность укладывается в общую модель (схему) БД ? Из Вашего кода в ссылке ясности не наступило. Для меня, по крайней мере. Вдобавок у меня чувство, что Вы использовали Code First, который как китайская грамота - смотрю книгу, а вижу фигу ![]() Нужны Ваши пояснения ![]() Если, конечно, не затруднит. Добавлено через 20 минут Попробую немного повоображать (люблю я это дело) Есть веб-сайт, который представляет клиенту (браузеру) некую страничку с неким интерфейсным функционалом. На страничке есть контент в виде статей или абзацев, каждый из которых представлен собственным блоком текста. Пользователь имеет возможность: 1) Вносить изменения в любой блок 2) Добавлять новый блок и наполнять его текстом, картинками и т.д. 3) Удалять целиком весь блок. Важно как организована на Клиенте имплементация функционала. Тут есть 2 варианта (есть и третий, но не будет о нем пока): 1) Обмен с сервером поблочный, т.е. действие (удалить-добавить-схранить) воспринимается только к одному блоку. Если юзер меняет 3 блока, добавляет 2 и удаляет 4, то он должен условно "нажать на кнопку" 3+2+4 = 9 раз. 2) Обмен с сервером по общей команде. Т.е. после того, как юзер сделал то же самое, что в 1), на кнопку жмется один раз - и на сервер летит уже не посылочка, а целая "тележка". Если для случая 1) все предельно ясно и решается тремя урлами и, соответственно, тремя методами контроллера, то для случая 2) все запутаннее., т.к. необходимо как-то запихать всю эту "тележку" в одну "посылку" и как-то еще и промаркировать каждую посылку на предмет "удалить-добавить-изменить". Как реализовано у Вас ?
0
|
|
|
управление сложностью
|
||||||||||
| 28.03.2021, 20:27 [ТС] | ||||||||||
|
Хочу запилить на сайте систему ярлыков, чтобы была возможность выборки похожих(релевантных) материалов. Т.к. строковое представление (и хранение) не совсем хотелось бы (а его похоже не избежать, блин, пока пишу это, в голову лезет JSON), решил хранение ярлыков выделить в отдельную таблицу в БД и соединить с таблицей статей через связь многие-ко-многим (в бд также появилась промежуточная таблица). Почему я так сделал? Мне показалось удобно - по ярлыку можно получить все статьи, в которых он используется.
0
|
||||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 28.03.2021, 21:22 | |
|
Важно как организована на Клиенте имплементация функционала.
Добавлено через 51 секунду Нужна разметка (Представление) + JS
0
|
|
|
управление сложностью
|
|||||||
| 28.03.2021, 21:31 [ТС] | |||||||
0
|
|||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 28.03.2021, 23:02 | |
|
У Вас даже не "тележка", а целый "вагон". Не мудрено, что на сервере приходится разбирать все это нагромождение чемоданов
![]() ИМХО, "Клиент" у Вас явно перегружен, нужно делать проще и управляемее. Почему-то Вы не используете JS, - здесь он явно был бы по делу. Почему бы Вам не использовать вместо одного толстого запроса несколько тонких, по контексту ? Ну и зачем перегрузка всей страницы, почему не асинхроны ? Извините, но этот Ваш код - "ф топку !" Увлекаемся шаблонами ? Ну-ну ![]() Добавлено через 8 минут В Ваше странице несколько блоков с группами контролов, они все связаны с одной сущностью БД ? Сдается мне, что нет. Опять же есть несколько Textarea для обширных текстов. Тут явно напрашивается комбинация параметров и JSON. Ну и асинхрон, конечно ![]() Добавлено через 10 минут Но чтобы разобраться полностью, нужен макет страницы. А еще лучше не рэйзоровское "художество", а разметка, приходящая на Клиент. Честно говоря, я уже давно избегаю всех этих @Html.xxx, кроме @Html.Action и @Ajax.ActionLink - "многа букав" и неожиданности в итоге. Мне проще выражаться на языке разметки Ну и, конечно, JS, куда ж без него. По поводу бутстрапа (а также прочих вью и реактов). Дело, конечно, личное - "..каждый имеет право" (М.А. Булгаков "Собачье сердце"). Все хорошо для новичков и ленивых, не надо разбираться в стилях, адаптивность и отзывчивость, и все такое.. Но как же все это загрязняет код ! Два последних абзаца - сугубо личное. Так, выход эмоций. Можете проигнорить
0
|
|
|
управление сложностью
|
|||||||||
| 29.03.2021, 07:24 [ТС] | |||||||||
, так, чисто поверхностно, бесит меня утиная типизация![]() , в мире .Net он уже отмирает, на смену приходит Razor (Blazor)
0
|
|||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 29.03.2021, 14:20 | |
|
Саша, тут ведь какое дело..
Я начинал, как и Вы, с шаблонов, бутстрапов, даже колбасил Vui, но в условиях студии все это кошмарно громоздко и, главное, глючно. Я имею в виду отладку фронта. О глюках с кэшированием стилей и скриптов уже много писано здесь, повторяться не буду. Вкратце так: 1. То, что мы видим в рэйзоре, мягко говоря, отличается от того, что в реале летит на клиент. 2. Все эти вьюшные вставки вкупе с шарпными "инъекциями" и зубодробительными классами страпа делают разбор кода представлений весьма не комфортным. Особенно, если используются частичные представления. 3. Страп, конечно, хорош. Может быть. Но все равно не обходится без собственных стилей. И тогда начинается путаница. Но если в своих разобраться не трудно, благо их не так уж и много (несколько сотен строк css), то лазать разбираться в страп - хорони, Господь. 4. Бесконечные танцы с переключением опций кэширования в браузере чтобы заставить его каждый раз при запуске приложения тянуть новые css и js очень быстро начинают бесить 5. Валидация. Куда проще (быстрее, изящнее, конкретнее) делать ее чисто JS, заодно выделяя стилями ошибки в полях ввода, чем все эти атрибуты, приползающие из хелперов в рэйзоре. К тому же опять-таки при ошибках "дергается" сервер. 6. Отсутствие прозрачного управления асинхронностью. и так далее Устав от всего этого я взялся плотно за HTML, JS, CSS. И отладку фронта вне студии, вообще вне сервера ![]() Где взять контент, спросите Вы ? Без проблем - пишу какой-нибудь отдельный InitContent.js, в котором с помощью копипасты и за полчаса стучу заполнение страницы контентом. В итоге, получив в каком-нибудь notepad++ готовые части (html,css,js), просто "внедряю" их в проект VS и сосредотачиваюсь на логике бэка. При этом фронт меня уже почти не отвлекает. Экономия нервов и времени колоссальная. Для примера, попробуйте в "студии" сверстать какой-нибудь простенький отзывчивый макетик, а потом то же самое - в блокноте. И почувствуйте, как говорится, разницу ![]() Отдельная тема - JS. Ну никуда от него не деться, никуда ! Вы просто не сделаете ни одного приличного веб-интерфейса без него. Если даже Вы явно его не используете, т.е. в проекте у Вас нет ни одного файла .js, это вовсе не значит, что JS не работает в Вашей странице. Убедиться в этом можно, заглянув в хедер Вашего html и увидев там всякие ссылки на js (тэги <Script>). Я его тоже боялся как черт ладана Но, когда освоил более-менее, то понял, что это очень здорово ! Мало того, что Вы "оживляете" Вашу страничку, Вы еще существенно упрощаете код проекта (View). И, кроме того, делаете вещь, которые сложно сделать на сервере. Например, попробуйте организовать модальное окно или всплывающее pop-up меню на сервере. Или сделайте "карусель". Это, конечно, можно, но сколько у Вас это займет времени и что получится в итоге ?Добавлено через 20 минут И еще один важный момент. Точнее два. I. Особенности проекта Если Вам нужно сделать "сайт-картинку", ну что-то вроде "портала" какого-нибудь Мухосранского сельсовета, где есть фоточки, пару видосов, строка меню (типа "о Нас", "Коммуникации", "Правление" и т.д.) и новости в виде выстроенных вертикально блоков, то вполне можно обойтись "штатными" средствами VS. Вроде Вашей простынки, только без правки, конечно. (Правка, т.е. внесения изменений, в таких проектах очень часто делается простой заменой файлов на сервере безо всякого CMS) Но на таких проектах заработаешь разве что "на хлеб", на масло вряд ли ![]() В реальности для создания даже простенького сайта для интернет-магазина или того портала, по полнофункционального, с обратной связью, блогами, услугами и т.д. без JS, асинхрона, визуальных эффектов и т.д. все равно не обойтись. II. Среда. Если Вы попадаете в солидный Проект с командой, солидным инвестором и соответствующим финансированиям, то Вы воленс-неволенс будете работать с принятыми в "команде" стандартами. Если он юзают Angular, QJuery, BootStrap и еще тучу всевозможный причиндалов, Вам придется все это освоить и применять. И, хуже того, лезть в чужой код, разбираться в нем. Тут уж, как говориться, "ешь что дают". И незнание JS, css и какого-нибудь фронт-фреймворка, оправданием быть не может. Как в армии - "Не можешь - научим, не хочешь - заставим". Резюме: чем больше знаешь, тем меньше будет проблем с участием в Проектах (в том числе своих собственных)
0
|
|
|
управление сложностью
|
|
| 29.03.2021, 14:36 [ТС] | |
|
MsGuns, все это прекрасно понимаю, но, "ем что дают"
, для простого бложика можно было и WP запустить, не заморачиваться, но хотелось как всегда большего - научиться, поэтому решил заплить свой велосЕпеТ.Теперь по поводу вопроса - я так и не понял, почему представление возвращает "новый" объект с "потерей" данных. Не рассматривая работу с JS (возможно в будущем все-таки придется сделать усилие и выкурить его). Нужно явно в представлении заполнять все поля объекта, чтобы ничего не "терялось"? Или уже в обработчике post-запроса организовывать логику работы с ярлыками (добавлять, изменять и т.п.)?
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||||
| 29.03.2021, 15:02 | ||||
Сообщение было отмечено Почтальон как решение
РешениеНе зная Вашей предметной области, сделаю такую "аллегорию": Если Счет-Фактура. Сущность-документ. С атрибутами-характеристиками: номер, дата, контрагент и т.д.) Назовем его "заголовок". А есть перечень ТМЦ (как бывшему одинэснику, Вам этот термин, безусловно, знаком), состоящий из нескольких сущностей - строк фактуры, со своими же атрибутами-характеристиками (наименование, цена, количество и т.д.) Пишем веб-интерфейс для работы со Сетами-Фактурами. В нем показываем как заголовок, так и фактуру. Второй - как сетку (<div> или <table> - без разницы). Даем править все, т.е. как заголовок, так и фактуру. При этом кнопка "Сохранить" - одна, "Одна на всех, мы за ценой не постоим" (с) По-Вашему, при отсылке всех изменений за раз, сколько сущностей мы правим на сервере ? Одну ? Как бы не так ! Изменениям подвергнется не одна таблица, а минимум две. В терминах MVC - 2 (две) модели. О какой-же "моно-сущности" тут может идти речь ? Так вот, можно сделать интерфейс так, чтобы при любых "точечных" изменениях, например после внесения правки в заголовок СФ или после изменения/удаления/добавления) одной строки фактуры, на сервер летел запрос на изменение одной записи в таблице. Естественно, тут уместно разделение методов контролера по функциональности. Один - на изменение Заголовка, другой - на изменение строки фактуры, третий - на добавление новой строки фактуры и т.д. Все это, конечно, реализовать аяксом чтобы юзер не ждал и страничка не дергалась. Вот тут-то без JS просто не обойтись ![]() Добавлено через 8 минут ![]() "Потеря" касается не столько данных, сколько "маркеров". Вам же известно, что такое "состояние страницы" ? При полной перечитке страницы ( а у Вас нет аякса, поэтому после каждого чиха на сервер, страничка будет полностью перечитана) оно, безусловно, будет утеряно. Даже если Вы на сервере промаркируете все текущие элементы (например, выделение фоном блока с курсором), расположение этого блока на перечитанной странице будет иным (например, блок был вверху экрана, а после перечитки станет внизу). Плюс экран "дернется" (по понятной причине) Именно это я и имел в виду. Добавлено через 5 минут Я же Вам толкую об AJAX, где такой дифференциации делать не нужно. Один метод GET и все. Ну и, конечно, вопросы конфеденциальности мы тут не затрагиваем. Добавлено через 2 минуты Если Вам интересно, мы можем связаться по скайпу
1
|
||||
|
управление сложностью
|
|||||||||
| 29.03.2021, 15:16 [ТС] | |||||||||
|
Т.е. грубо, на коленке (могут быть ошибки, а к исходнику доступ только вечером):
Добавлено через 4 минуты , значит в моем варианте - нужно какой-то скрытый список, из которого потом заполнить модель в представлении.![]() Добавлено через 2 минуты
0
|
|||||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||||||||||||||||||||||||||
| 29.03.2021, 18:41 | |||||||||||||||||||||||||||
|
У Вас очень большой косяк в базе. Отношение многие-ко-многим Вы пытаетесь реализовать через перекрестные ссылки.
"А это бандитизъм" (с) Не мудрено, что EF обкладывает Вас матами. Нужна дополнительная перекрестная таблица, через которую Вы и будете "дергать ниточки" (тэги), А ссылки "друг на дружку" ф топку, т.е. удалить совсем. Добавлено через 1 минуту И эта.. бросайте все и жуйте аякс + JS. Нельзя стать моряком, не научившись плавать ![]() Добавлено через 22 минуты ![]() Есть четыре таблицы
Идем дальше Добавлено через 25 минут Строим модель. С использованием EF, я так уже не делаю, но сделаем так, недостатки быстро себя обнаружат ![]() С сущностями-таблицами (моделями EF) все ясно - при мапировании просто на них чекаем. Получает контекст EF с DBSet<[Имя таблицы БД]> на каждую из таблиц + классы моделей, по одну на каждую таблицу. Эти классы-интерфейсы (DBSet) нам понадобятся главным образом для внесения правок. Осталось решить, что мы делаем с отображением (представлением, затем веб-страницей) Ясно, что таблицы для этого не нужны, а нужны результаты выборок. Т.е. дополнительные классы моделей и дополнительные методы для их извлечения. И вот тут дилемма. 1 Путь. "Серверный" Добавление в БД новых сущностей - UDF или SP (тут простое правило - если можно обойтись UDF, то делать ее. SP только если в теле UDF реализовать алгоритм выборки нельзя из-за ограничений стандарта/диалекта SQL, например в TSQL в теле UDF нельзя вызвать SP, а также вернуть более одного датасета). Полученные сущности UDF + SP добавляются обновлением Модели через БД. В результате получим новые классы + методы контекста. Все - в папке edmx, т.е. внутри EF. Небольшой спойлер Если с UDF все будет вполне прогнозируемо, то с SP могут быть "чудеса" и это - первый недостаток 1-го пути.2 Путь. "Расширение ORM" В базу не лезем от слова совсем. Исходя из требований интерфейса составляем новую Модель, в которую включаем все, что нужно для интерфейса. Вместе с id предусматриваем наименование, тексты и вообще все, что нужно. Именно по этой модели будем строго типизировать будущие представления, возможно, частичные. Модель создали. Как с ней работать ? Для этого создаем статичный класс Repository, где будем писать методы для получения новых классов расширения Модели. В каждом методе извлекается и обрабатывается "свой" датасет. Запрос можем писать используя LINQ. При этом никто не запрещает использовать "штатные" модели самого EF, ибо репозиторий его видит. В итоге получаем репозиторий с нужными методами, возвращающими нужные датасеты. Да-да, именно те, которые у нас предусмотрены интерфейсом и по которым типизируются частичные представления. (Почему именно частичные, думаю, понятно). Минус - то, что приходтся работать не только мышкой, но и ручками, и головкой. Плюс - гибкость и получение некоторой независимости (иногда о-о-очень существенной и даже критичной) от стоглавого и стозевного IF. Также не забываем, что расширение касается только извлечения моделей, но никак не внесения в них изменений. Это - важно ! По крайней мере, в нашем случае. Добавлено через 26 минут С моделью разобрались. Приступаем к логике. 1. Контроллер. Для простоты опускаем пока все авторизации и ограничиваемся единственным стандартным методом Index, основное назначение которого - отправить Клиенту стартовую страницу. Добавили новый контроллер и пока код его не трогаем ибо не знаем точно, что он должен собрать для представления Index. 2. Представление Index. Создаем как обычное, не строго типизированное (пока). Получаем болванку html. Если уже есть фронт (как писалось выше), то вся разметка из блокнота тупо переносится в представление. css и js если таковые имелись в нашем мини-проекте верстки в блокноте, также добавляются в проект в папку Content (созданную нам же в ручном режиме). Из верстки сразу видно, что нам нужно: 1. Список статей - например в блоке левой части тела HTML 2. Список глав для текущей (выбранной статьи). Например через комбобокс где-нибудь вверху страницы, но рядом со списком статей. Возможно главы добавить в список статей как подуровень - это уже как вздумается. Точнее, как определено в ТЗ. 3. В оставшейся части страницы (правый блок верстки) - одну главу по текущей (выбранной) статье. Это - если главы в "дереве со статьями". Иначе просто идут подряд одна под другой вложенными блоками (flex). Итак, что нам нужно: 1. Список всех статей или статей и глав (для левой части) 2. Содержание текущей главы (если главы в дереве) или всех глав статьи (иначе) Теперь возвращаемся к контроллеру и пишем код, который вернет нам: 1) Список всех статей (метод репозитория), желательно отсортированный (добавляем логику сортировки в соответствующий метод репозитория) - пишем строчку в методе контроллера
Для этого добавляем код
Добавлено через 21 минуту Тут тоже развилочка ![]() 1. Все - в одном представлении 2. В главном представлении только каркас + детализация текущей статьи (имеется в виду содержимое таблицы Acticle), все остальное - в частичных. 1. Все - в одном. Каркас + разметка всех контентов. Строгая типизация ? По какому классу, если их у нас минимум 2 (я еще ничего не говорил о тэгах, это - дальше) ? Это мы видим из логики кода метода контроллера Index. Есть два подхода а) : через класс-контейнер и строгую типизацию View по этому классы и б) строгой типизации нет вообще, датасеты передаются через ViewBag, в теле представления для обращения к датасетам с моделями или модели (в нашем случае - статье) делается явное приведение типа. В обоих случаях для верности добавляем в Index.cshtml самой первой строкой
Не забываем при этом о стилях, выделяя "текущие" или "активные" элементы везде, где нужно. При стартовой странице - это 1-я глава. 2. Частичные представления. Нет желания описывать все подробно. Думаю, что тут все должно быть ясно. Каждое частичное на свою модель. Привязка к мастер View. Подключение к Мастеру через PartialView с передачей нужной модели через параметр, как обычно. Добавлено через 11 минут Ах да ! Для просмотра и редактирования самой статьи и глав надо тоже в макете предусмотреть блоки, где будут инпуты с названием статьи, автором и т.д. В главном View создать разметку, где все это показать. Тот же самое с главами, но в другом блоке макета страницы. Заполнение - из модели (строго типизованной либо приведением типа), благо контроллер всю информацию нам "сбросил". Добавлено через 15 минут Стартовая страница есть, мы ее видим и все хорошо. Теперь собственно GUI. Юзер клацает по нашим блокам и мы должны как-то реагировать. Прежде всего : а) никаких асинхронов, аякс идет лесом, б) страница обновляется полностью. При этом всем появляется вопрос: что, если юзер поредактировал статью или главу или содержимое главы, а потом и клацнул на другую статью в дереве - что делать с его изменениями ? Либо алертнуть, что, мол, а не сохранить ли то, что он тут понавводил ? Либо автоматом сохранить с валидацией. Учитывая, что боимся JS, т.е. alert противопоказан, остается решать автоматом, т.е. пытаться сохранить и потом уже перескакивать на другую статью, обновляя все данные в блоках для редактирования, а также все блоки с контентом. Вопрос. И я не знаю как его решить без JS. Можно, конечно, блокировать смену статьи до того, как не нажата кнопка "Сохранить" или "отменить". Но тут опять нужен JS !!! Решаемо, конечно, но для этого надо свернуть горы. Во-первых, создать метод Index c [HttpPost], насовать в него кучу параметров (можно, конечно, через модель, но на клиентской разметке все равно будет туча параметров. Во-вторых, вызов метода на клик на списке - реализовать через форму не знаю как, ибо данные разбросаны по фрагментам макета, но Вы, похоже, с этим освоились серверной разметкой ![]() В-третьих, в коде метода проверить, не изменились ли значения той же статьи по сравнению с теми, которые в базе и, если изменились, то вернуть то, что получили, с ошибкой валидации типа "не нажали на кнопку Сохранить". Короче, геморрой из геморроев Но сделать, конечно, можно.Добавлено через 8 минут Думал продолжить, но, честно говоря, не хочу. Ибо геморрой страшный
0
|
|||||||||||||||||||||||||||
|
управление сложностью
|
||||
| 30.03.2021, 07:36 [ТС] | ||||
|
Первоначально я делал через таблицу соответствий, но подумал что это какой-то кустарный способ (с EF не работал в плане связи M:M). Нужно переварить ваш пост.
0
|
||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 31.03.2021, 02:39 | ||
![]() Тут нельзя размещать ссылки, поэтому просто найдите на трубе каналы "Анна Блок", "Фрилансер по жизни". Особенно последний (хотя и Аннушка хороша !) - по верстке я лучшего материала не встречал. Отличная речь, все по делу, кратко, емко. Советую хотя бы ознакомиться ![]() Что касается JS, то тут все много хуже.. Попробуйте "Владилен Минин" или "ITVDT", этот лучшее, что мне встречалось именно по JS Добавлено через 3 минуты Книжки по JS категорически не советую - масса воды, картинок (скриншотов), куча времени и мизерный эффект. Хотя, возможно, хорошей книжки мне просто не встретилось ![]() Основной источник - это, конечно, инет. MSDN, кстати, совсем не плох, если правильно им пользоваться
1
|
||
|
управление сложностью
|
||||
| 31.03.2021, 07:13 [ТС] | ||||
|
0
|
||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 31.03.2021, 16:08 | ||
Вы не правы. Просто JS не строго типизированный язык + интерпретатор. А в остальном, прекрасная маркиза, все хорошо, все хо-ро-шо
0
|
||
| 31.03.2021, 16:08 | |
|
Помогаю со студенческими работами здесь
18
Ошибка при передаче свойства типа double с View в контроллер Теряются данные при Insert Теряются данные при работе с WinPcap Теряются данные при send/recv Теряются данные при выводе в textbox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|