Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
На странице несколько слабо связанных форм. Про слабо связанную форму имеется в виду, что они не относятся к одной модели, как вложенные. При генерации моделей стандартными средствами, поле Id, которое скрытое, которое генерируется в размеку <input id="Id" name="Id" type="hidden" /> объявляется более одно раза, что приводит к невалидному коду, что собственно не так уж и критично (при раздолбайском к этому отношению), но также создает тупиковую ситуацию для скриптов, обращающихся к полям по #идентификаторам. Есть несколько путей решения этой проблемы: все формы сделать вложенными в единую вью-модель генерить формы полностью ручками создать свои темплейты, генерирующие разметку стандартыми средствами, но "убивающими" стандартную генерацию id в AdditionalHtmlAttributes, подменяя на свою (допустим ModelName + "_" + FieldName) Что посоветует уважаемое сообщество? Как лучше? все когда-нибудь начинается снова ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 18:41 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Не знаю правильно ли я понял. Когда мне нужно передать несколько форм в контроллер, то делаю таким образом: Код: html 1. 2. 3. 4. И получаю массив моделей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 19:44 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Парамон, Если это массив, то проблем как раз нет, Razor генерирует правильную разметку в Html.EditorForModel(x => item) Речь идёт о разных моделях на одной странице. Страница не привязана к конкретной модели, на ней агрегировано управление разными моделями во вкладках и всплывающих окнах. Многие формы подгружаются Ajax-ом, по мере необходимости, соответственно формы могут выдаваться разными контроллерами и разными контроллерами обрабатываться (Ajax Form). Вот и встал вопрос, как делать это по уму штатными средствами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 21:06 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVostt, Так у вас во всех моделях идентификаторы id одинаково названы, что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 21:28 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVostt...Что посоветует уважаемое сообщество? Как лучше?... Я не сообщество, но весьма рекомендую почитать как устроен HTTP. Возможно, вопросы отпадут сами собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 21:36 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
ShSerge, Искренне не понимаю при чем тут транспортный протокол HTTP, какое он имеет отношение к вопросу, относящемуся к генератору представлений ASP.NET MVC Razor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 21:43 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Парамон, Некоторые. Например идентификатор объекта в любой модели это Id. Еще есть часто использующееся поле Name в разных моделях, несущее одинаковую смысловую нагрузку. Получается, что они повторяются на странице. Поясню. Допустим, у нас есть ViewModel, содержащая два сложных поля Person и Organization. Тогда при рендеринге полей Person и Organization проблем не будет, так как сгенерируются имена типа Person_Id, Organization_Name. Это обеспечивается фреймворком. Но это самый простой практически учебный случай. На странице может присутствовать больше форм, которые можно запихнуть во ViewModel, но не всегда нужно рендерить их сразу. Пользователю редко нужно редактировать сразу все подряд. Для этого существуют механизмы Ajax, можно во всплывающее окно отрендерить форму, если пользователю она понадобится. И форму может выдать тот контроллер, который предназначен для работы с определенными моделями. И этот контроллер ничего не знает про то, где эта форма будет отрендерена, поэтому не будет добавлять префиксы типа Person_ или Organization_. Это всего лишь один из кейсов. На сколько я понял народ справляется с проблемой ручным управлением рендеринга типа <input type="hidden" id="item[@i].Id" name="item[@i].Id" value="@p.Id" /> без Html.EditorFor/TextBoxFor (т.е. просто напросто лишает себя стандартных механизмов валидации и правильного формат-байндинга). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 21:51 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVosttShSerge, Искренне не понимаю при чем тут транспортный протокол HTTP, какое он имеет отношение к вопросу, относящемуся к генератору представлений ASP.NET MVC Razor. Это чисто по сабжу " Несколько форм на одной странице". Ни к какому разору это не относится. Кстати, не мешало бы хтмл и яваскрипт подучить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 22:02 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
ShSergehVosttShSerge, Искренне не понимаю при чем тут транспортный протокол HTTP, какое он имеет отношение к вопросу, относящемуся к генератору представлений ASP.NET MVC Razor. Это чисто по сабжу " Несколько форм на одной странице". Ни к какому разору это не относится. Кстати, не мешало бы хтмл и яваскрипт подучить. Не хочу вступать в неумный холивар, но все же вопрос относится к процессу генерирования идентификаторов стандартным движком представлений ASP.NET MVC (в данном случае, Razor), а не к тому как получить несколько форм на одной странице. Внимательно читаем топики :) Вни-ма-тель-но. И вот такие советы "подучить хтмл и яваскрипт", лучше не раздавать, если не собираетесь уточнять, что же именно в этой тематике надо мне подучить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 22:11 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVosttНекоторые. Например идентификатор объекта в любой модели это Id . Еще есть часто использующееся поле Name в разных моделях, несущее одинаковую смысловую нагрузку. Получается, что они повторяются на странице. Имхо потенциальные грабли, обычно даю уникальные имена. hVosttНа сколько я понял народ справляется с проблемой ручным управлением рендеринга типа <input type="hidden" id="item[@i].Id" name="item[@i].Id" value="@p.Id" /> без Html.EditorFor/TextBoxFor (т.е. просто напросто лишает себя стандартных механизмов валидации и правильного формат-байндинга). Да нет, пример для наглядности был. Для стандартных задач использую стандартные механизмы, и конечно типизированные хелперы, как же без них, но если что, не брезгую и обычной разметкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 22:21 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVostt, авторно также создает тупиковую ситуацию для скриптов, обращающихся к полям по #идентификаторам. ну это кабы не тупиковая ситуация а банальная, все проблемы разруливаются селекторами jq я так понимаю у вас id лежат в разных формах что мешает на форму из вьюхи навесить идентификатор примерно так Html.BeginForm("Index", "Home",FormMethod.Post,new{id="ass1"}) а потом обыкновенным запросом выдернуть из него поле ввода по id примерно так $('form[id = ass1] input[id = Id]') это самый банальный вариант, есть более немного затратные варианты, есть еще как бы более виртуозные.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2013, 22:57 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVosttНа странице несколько слабо связанных форм. Про слабо связанную форму имеется в виду, что они не относятся к одной модели, как вложенные. При генерации моделей стандартными средствами, поле Id, которое скрытое, которое генерируется в размеку <input id="Id" name="Id" type="hidden" /> объявляется более одно раза, что приводит к невалидному коду, что собственно не так уж и критично (при раздолбайском к этому отношению), но также создает тупиковую ситуацию для скриптов, обращающихся к полям по #идентификаторам. Есть несколько путей решения этой проблемы: все формы сделать вложенными в единую вью-модель генерить формы полностью ручками создать свои темплейты, генерирующие разметку стандартыми средствами, но "убивающими" стандартную генерацию id в AdditionalHtmlAttributes, подменяя на свою (допустим ModelName + "_" + FieldName) Что посоветует уважаемое сообщество? Как лучше? все когда-нибудь начинается снова если бы вы потратили время на изучение работы MVC3 в частности движка Razor, то вы бы знали, что MVC для обработки используется name , а не Id , и более того, почти все методы типа @Html имеют перегруженные методы, которые позволяют задавать HTML атрибуты:) и в частности поменять Id:) а авторобращающихся к полям по #идентификаторам. а это nocomment ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 11:33 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Deza, если бы вы были повнимательнее и читали бы вопрос полностью, то увидили бы что об этом варианте я уже сказал (3 пункт) я спрашивал как лучше. и при чем тут name? речь идет только об идентификаторах. если вы знаете как быстрее обратить к элементам в js поделитесь открытием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2013, 20:06 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, в общем да, в селекторах можно ограничиться областью видимости формы. но. невалидно, жешь ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 01:03 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVostt, понятно что не валидно.... , а валидно иметь дубликат id на одной странице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 01:15 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, если настаиваете на дубликате, можете сделать выборку напрямую, через пользовательские атрибуты, html5 это терпит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 01:21 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVosttDeza, если бы вы были повнимательнее и читали бы вопрос полностью, то увидили бы что об этом варианте я уже сказал (3 пункт) я спрашивал как лучше. и при чем тут name? речь идет только об идентификаторах. если вы знаете как быстрее обратить к элементам в js поделитесь открытием. уйти от привязки к формам:) использовать ajax и и использовать в селекторе JQ className а не id:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 16:40 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
и вообще покажите пример кода, что б не строить догадки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 16:42 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Deza, если я покажу вам пример кода, вы скажете, что сюда просится нормальный такой knockout, backbone или т.п. :) и будете правы между прочим. вопрос больше теоретический. такое ощущение, что mvc проектировали сохранив остатки древней идеологии веб-формс, одна страница -- одна форма, но в более-менее вменяемом приложений количество контроллеров и вьюх на каждую модель будет зашкаливать. можно генерить код T4 или динамически, но это уже изобретение какого-то кастомного веб формс поверх mvc, значит идеального ничего не существует )) не зря telerik ушёл от своего условно-бесплатного MVC фреймворка, переключившись на js mvc и webapi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 17:51 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, вот именно. id генерируется по нехитрой технологии, зависящей напрямую от имени поля (и имени родительского поля при наличии), и нет способа сказать фреймворку, как тебе нужно генерировать Id. где-то в одном месте задать свою фабрику или переопределить метод. не нравится, затыкай своим id в new { id = "мойId" } в htmlAttributes, или пиши свои темплейты на все виды типов. в общем решение есть конечно, mvc крайне расширяемый и гибкий фреймворк, вот только далеко не все предусмотрели ) хотя это все имеет смысл, если всегда стремиться использовать стандартные инструменты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 17:57 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVosttГде-то в степи, вот именно. id генерируется по нехитрой технологии, зависящей напрямую от имени поля (и имени родительского поля при наличии), и нет способа сказать фреймворку, как тебе нужно генерировать Id. где-то в одном месте задать свою фабрику или переопределить метод. не нравится, затыкай своим id в new { id = "мойId" } в htmlAttributes, или пиши свои темплейты на все виды типов. в общем решение есть конечно, mvc крайне расширяемый и гибкий фреймворк, вот только далеко не все предусмотрели ) хотя это все имеет смысл, если всегда стремиться использовать стандартные инструменты. чего то не вьеду, в ваши претензии к разработчикам. вам не нравится как генрит среда идентификаторы что ли? пример class Model{ public string Name{get;set;}} @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) @Html.HiddenFor(a=>a.Name) вы хотите что бы у всех был уникальный id? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 18:44 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Где-то в степи, @model ViewModel1 .... @Html.EditorForModel() — стандартно @Html.Partial("_View2", new Model2()) — другая модель на той же странцие @Html.Action("Edit", "Model3Controller") — при вложенном вызове контроллер отдаёт партиал, уже понимая, что его форму используют где-то в другом месте, значит нужен неймспейс в id А вы привели пример обращение к одному и тому же свойству одной и той же модели. Конечно же в рамках одной модели хочется одинакового поведения. Если забить на валидность, то проблема как бы исчезает.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 21:18 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
hVostt, хотелось бы знать к какому решению ты пришел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2014, 15:25 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
ShSergehVostt...Что посоветует уважаемое сообщество? Как лучше?... Я не сообщество, но весьма рекомендую почитать как устроен HTTP. Возможно, вопросы отпадут сами собой. Серж сцуко в своем репертуаре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2014, 17:42 |
|
||
|
Несколько форм на одной странице [MVC/Razor]
|
|||
|---|---|---|---|
|
#18+
Denis2105hVostt, хотелось бы знать к какому решению ты пришел. замена стандартных хелперов, типа Html.TextBox (и т.д.) на свои собственные, которые, кстати, по-лучше будут во всех отношениях... ну и там естественно решается проблема с правильной генерацией id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2014, 17:45 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38615743&tid=1357449]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 395ms |

| 0 / 0 |
