С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
ninjaValerok
0 / 0 / 0
Регистрация: 01.03.2015
Сообщений: 7
1

Распарсить данные из элементов, созданных функцией javascript

08.03.2015, 14:23. Просмотров 634. Ответов 19
Метки нет (Все метки)

Здравствуйте! по нажатию кнопки создается таблица с "input"ами,делается это через javascript. Я не могу понять как мне эти данные распарсить...читал что-то про DefaultModelBinder и всякие такие штуки,но не понял(
подскажите пожалуйста,как решить эту проблему?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2015, 14:23
Ответы с готовыми решениями:

I18n + ASP MVC + JavaScript/JQuery - как получить данные из файла Resourses в JavaScript ?
Доброй ночи всем. Прощу помощи. Пытаюсь сделать мультиязычный сайт. Создал файл...

Как считать данные с динамически созданных контроллов
Привет всем! Такой вопрос. У меня есть страница с формой добавление...

Есть ли возможность при 9 созданных окнах создать одну и туже кнопку с функцией
Подскажите есть такая ли возможность при 9 созданных окнах создать одну и туже...

Данные с программных созданных кнопок
Подскажите как получить название кнопок. Код foreach (string a...

Распарсить данные с json
Всем привет, уже давно мучаюсь над этой проблемой, уже и гуглил(может конечно и...

19
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
09.03.2015, 23:59 2
ninjaValerok, правильно читали. Нужно сделать кастомного дата биндера, который будет привязывать нагенерированные поля к модели. Примеров в инете хватает
1
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
10.03.2015, 01:44 3
Лучший ответ Сообщение было отмечено ninjaValerok как решение

Решение

Я думаю, что более правильный подход: учет ваших объектов, заданных через input'ы, вести в javascript, а после уже готовый список объектов через ajax передавать в Controller в виде json: JSON.stringify(something);
1
ninjaValerok
0 / 0 / 0
Регистрация: 01.03.2015
Сообщений: 7
11.03.2015, 14:51  [ТС] 4
Добавлено через 5 минут
вы могли бы поподробнее об этом рассказать? я новичок как в asp.net,так и в веб программировании...
из примеров я нашёл очень близкий с моей задачей,но как раз не понял про model binder...
http://stackoverflow.com/questions/6...h-nested-class
в этом примере мне не ясна реализация интерфейса "IModelBinder"...вас не затруднит вкратце объяснить что тут происходит?

Добавлено через 33 минуты
Я разобрался как получить данные,но всё равно осталось недопонимание касательно binder'а...

Добавлено через 31 минуту
Но теперь у меня новая проблема: после передачи данных(в контролере создался объект модели,всё хорошо) не вызывается функция done,т.е.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$.ajax({
                type: 'POST',
                url: 'Home/Index',
                data: myjson,                
                dataType: 'json',
                contentType: 'application/json; charset=utf-8'
            })
            .done(function () {
                alert("yesssssssssss");
            })
            .fail(function () {
                alert("noooo");
            })
            .always(function () {
                alert("complete");
            });
Вызываются функции- fail и always...Наверное нужно что-то в контролере сделать,но я не могу сообразить...
0
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
11.03.2015, 15:10 5
kenny69, ну по гайдлайнам майкрософта стоит именно биндера делать. Я 486 на днях сдавал, знаю о чем говорю
1
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
11.03.2015, 16:33 6
Psilon, А чем именно аргументируется такой выбор? Просто интересно.
0
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
11.03.2015, 16:40 7
kenny69, ну они говорят, что так проще сопровождать. Ну и логику лучше держать отдельно в одном месте, а не раскидывать по вьюхам, скриптам, моделям и контроллерам

Controlling application behavior by using model binders

Before ASP.NET MVC and model binding, one of the most tedious chores that a web developer had to perform was mapping POSTed form variables to a server-side object. However, with model binding, the ASP.NET MVC 4 framework handles much of this chore. When you are designing an application, you might need to add additional model information to various pieces of your application, whether an entire class that needs custom binding or just a snippet.
One of the biggest advantages of using custom model binding is the potential for reuse. For example, suppose that you are working on a human resources application. There are multiple online forms in which users enter personal information, such as birthday, health insurance, dental insurance, and so on. Each area of the application that needs a date has three entry boxes for the date value: month, day, and year. Traditional mapping returns those three values as discrete model properties. Somewhere in your code, you have to parse them into a DateTime object. You could use a helper method to return a DateTime based on the three objects, but wouldn’t it be simpler if that were already done for you by the time the data got back to the server? Especially if it was already available for the next form that you have to create? That is one of the benefits of custom model binders.
Overriding the DefaultModelBinder shows C# code that overrides the default model binder with a new class. This class contains a hard-coded list of the properties that are on various models that fit the special UI criteria that you are concerned about: where Day, Month, and Year are stored in a separate drop-down list in the UI, but are defined within the model as a DateTime. There is a list in the class that describes the property names that are put in the UI like this. When the binder processes through the model and finds one of the property names that it is looking for, it attempts to ensure that one of the specially named form fields is present. If not, processing continues to the base class; otherwise, the system parses the values from the drop-down list.

While you can override the default model binder, you can also create a custom binder for a class and use that binder rather than the default binder. The code in Overriding the DefaultModelBinder parses through every bound model to determine whether it fits the criteria. This will have some performance impact, although minimal. If there is only one class that has the three drop-down lists representing a DateTime, you can make a special model binder for that class.
Your new class needs to implement the System.Web.Mvc.IModelBinder interface, which has the single BindModel method. In that method, you create the object, manage the binding, and return the object after binding is completed. You can then register it in the Application_Start method of Global.asax:
C#
1
ModelBinders.Binders.Add(typeof(MyNewModelBinder), new MyNewModelBinder ());
As you can see, customized model binders can be very useful when you are dealing with disconnects between the items that are displayed on a user interface and their real type. It can also handle situations when you want to change the names of items in a form, such as when a form submission might come from a different site and their form names do not match your model names. You don’t ever have to change your data structure just to support your UI needs; instead, write a model binder between the two.
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
11.03.2015, 17:14 8
Psilon, я думаю, что оба способа имеют право на существование и каждый использовать именно под ситуацию. Если логика с добавлениями input, посложнее, например, что-то вроде todo list, то я бы выбрал подход, который описал выше. Возможно даже, что использовал бы js framework вроде Angualar.

Если информация приходит с другого сайта и или тот пример с датами, когда число, месяц, год вводится в отдельные input -> model binder.
0
ninjaValerok
0 / 0 / 0
Регистрация: 01.03.2015
Сообщений: 7
11.03.2015, 21:42  [ТС] 9
вообщем я совсем разобрался,в методе контролера высылаю JsonResult,результат обрабатываю в $.ajax(...).done
0
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
11.03.2015, 23:51 10
kenny69, мое имхо что делать что-то сложное на клиенте - это безумство, не говоря уже о целых фреймворках На ithappens хорошие истории на эту тему были. Лучше передавать клиенту разметку готовую, а select * from bd.table, а там пусть скрипт разбирается, что ему нужно (а большинство фреймворков так и работают). Может я архаичен и инертен, не приемлю новые подходы, но имхо я прав.
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
12.03.2015, 03:27 11
Цитата Сообщение от Psilon Посмотреть сообщение
мое имхо что делать что-то сложное на клиенте - это безумство
А как делать тогда онлайн чаты, онлайн результаты соревнований, котировки, SPA? В таких приложениях достаточно сложная логика, но это логика по работе с UI.
Понятно, что работа с базой и бизнес логика на сервере, но запросы на изменение все равно из js к серверу должны идти. Не перезагружать же всю страницу при изменении 1 блока из 10.
По поводу фреймворка отчасти согласен, но это та цена, которая мы платим в угоду удобства и скорости разработки, но теряем в производительности нашего кода и привязке к его идеологии, архитектуре. Хотя и не факт, что при разработке своего велосипеда, мы не наткнемся на те грабли, которые уже учтены в framework, особенно это касается начинающих разработчиков. На крайний случай, можно создать fork одного из framework'ов на github, и изменять под свои нужды.
0
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
12.03.2015, 11:27 12
kenny69,
А как делать тогда онлайн чаты, онлайн результаты соревнований, котировки, SPA? В таких приложениях достаточно сложная логика, но это логика по работе с UI.
вебсокет?..
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
12.03.2015, 17:10 13
Ну это понятно (в таких случаях использую SignalR), но кроме него же еще достаточно сложная логика в js должна быть, я это к данному высказыванию:
Цитата Сообщение от Psilon Посмотреть сообщение
мое имхо что делать что-то сложное на клиенте - это безумство
Но это лишь часть примеров, те же SPA требуют сложной логики по работе с ui на клиенте, снимая нагрузку с сервера.
1
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
12.03.2015, 17:18 14
kenny69, ладно, переформулирую: в 99% задач делать сложную логику на клиенте - безумство

Никто не спорит, что бывают задачи, когда и палка стреляет.
1
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
12.03.2015, 17:44 15
Psilon, Я тоже исходил из своего опыта, у меня этот процент гораздо больше раз в 50 Просто каждый это видит через призму своего опыта.
0
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
12.03.2015, 17:49 16
kenny69, на моей текущей работе другая крайность - я переписывал модуль, который на шарике отправлял на сервер весь вьюстейт (а шариковский вьюстейт весит мегабайты), чтобы поменять местами два значения в <li> Переписал на JS, что характерно
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
12.03.2015, 18:10 17
Цитата Сообщение от Psilon Посмотреть сообщение
который на шарике отправлял на сервер весь вьюстейт
Это хороший пример как не надо делать, но это скорее не проблема инструмента, а кривое использование, либо его неверный выбор для вашей задачи. Мне кажется что-то вроде React или VirtualDom вкупе с другими иструментами подошло бы для такой задачи.
0
Psilon
Master of Orion
Эксперт .NET
6013 / 4866 / 902
Регистрация: 10.07.2011
Сообщений: 14,477
Записей в блоге: 5
Завершенные тесты: 4
12.03.2015, 18:20 18
kenny69, да не, я в результате просто с помощью JSa менял два значения, а при получении и отправке страницы просто сериализовывался/десериализовывался JSON из hidden-поля. Получилось весьма просто и практично.
0
sau
1996 / 1613 / 265
Регистрация: 22.07.2011
Сообщений: 6,091
Завершенные тесты: 1
12.03.2015, 21:58 19
Нужно просто разделять фронт и бэкэнд разработку , то что Вам , как asp net разработчику , кажется безумством , для frontend разработчика в порядке вещей. - достаточно взглянуть на кол-во js фреймворков , и максимум для чего им нужен сервер , это загрузить json данные с какой-нить функции рест.сервиса.

Кстати , в 15-й студии появились кое какая SPA поддержка , шаблоны под AngularJS и прочие фичи для фронтальных разработчиков. - вопрос только в том , что у них там свой перечень инструментов и студию они вряд-ли пользуют , а asp net-чикам погружаться в эти дебри по моему не с руки.
0
kenny69
burning1ife
1413 / 1235 / 292
Регистрация: 21.09.2008
Сообщений: 3,409
Записей в блоге: 9
12.03.2015, 23:19 20
Я бы скорее назвал себя backend developer, чем frontend. Но я уже не представляю современную разработку сложных веб-приложений без использования большого кол-ва js фреймворков. Да и частенько приходится проходить через все стадии разработки, от скетчей и продумывания архитектуры, до конечного продукта.
0
12.03.2015, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2015, 23:19

Распарсить данные с json
Проблема в следующем, получаю ответ Json следующий: {&quot;status&quot;: &quot;ok&quot;,...

Чем распарсить эти данные?
Здравствуйте! Есть данные в таком формате, чем их распарсить? Array (...

Как получить данные с динамически созданных textbox?
Пишу программу в которой пользователь указывает количество параметров зависимо...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru