powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Несколько форм на одной странице [MVC/Razor]
25 сообщений из 99, страница 1 из 4
Несколько форм на одной странице [MVC/Razor]
    #38140636
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На странице несколько слабо связанных форм. Про слабо связанную форму имеется в виду, что они не относятся к одной модели, как вложенные. При генерации моделей стандартными средствами, поле Id, которое скрытое, которое генерируется в размеку <input id="Id" name="Id" type="hidden" /> объявляется более одно раза, что приводит к невалидному коду, что собственно не так уж и критично (при раздолбайском к этому отношению), но также создает тупиковую ситуацию для скриптов, обращающихся к полям по #идентификаторам.

Есть несколько путей решения этой проблемы:
все формы сделать вложенными в единую вью-модель

генерить формы полностью ручками

создать свои темплейты, генерирующие разметку стандартыми средствами, но "убивающими" стандартную генерацию id в AdditionalHtmlAttributes, подменяя на свою (допустим ModelName + "_" + FieldName)

Что посоветует уважаемое сообщество? Как лучше?

все когда-нибудь начинается снова
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140716
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю правильно ли я понял. Когда мне нужно передать несколько форм в контроллер, то делаю таким образом:

Код: html
1.
2.
3.
4.
<form action="@Url.Action("Update")" method="post">
@{  int i = 0; foreach(var p in Model) {
<input type="hidden" id="item[@i].Id" name="item[@i].Id" value="@p.Id" />
...


И получаю массив моделей.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140795
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

Если это массив, то проблем как раз нет, Razor генерирует правильную разметку в Html.EditorForModel(x => item)

Речь идёт о разных моделях на одной странице. Страница не привязана к конкретной модели, на ней агрегировано управление разными моделями во вкладках и всплывающих окнах. Многие формы подгружаются Ajax-ом, по мере необходимости, соответственно формы могут выдаваться разными контроллерами и разными контроллерами обрабатываться (Ajax Form). Вот и встал вопрос, как делать это по уму штатными средствами?
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140817
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Так у вас во всех моделях идентификаторы id одинаково названы, что ли?
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140825
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt...Что посоветует уважаемое сообщество? Как лучше?...
Я не сообщество, но весьма рекомендую почитать как устроен HTTP. Возможно, вопросы отпадут сами собой.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140835
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

Искренне не понимаю при чем тут транспортный протокол HTTP, какое он имеет отношение к вопросу, относящемуся к генератору представлений ASP.NET MVC Razor.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140840
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

Некоторые. Например идентификатор объекта в любой модели это 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 (т.е. просто напросто лишает себя стандартных механизмов валидации и правильного формат-байндинга).
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140849
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttShSerge,

Искренне не понимаю при чем тут транспортный протокол HTTP, какое он имеет отношение к вопросу, относящемуся к генератору представлений ASP.NET MVC Razor.
Это чисто по сабжу " Несколько форм на одной странице". Ни к какому разору это не относится.
Кстати, не мешало бы хтмл и яваскрипт подучить.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140857
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSergehVosttShSerge,

Искренне не понимаю при чем тут транспортный протокол HTTP, какое он имеет отношение к вопросу, относящемуся к генератору представлений ASP.NET MVC Razor.
Это чисто по сабжу " Несколько форм на одной странице". Ни к какому разору это не относится.
Кстати, не мешало бы хтмл и яваскрипт подучить.

Не хочу вступать в неумный холивар, но все же вопрос относится к процессу генерирования идентификаторов стандартным движком представлений ASP.NET MVC (в данном случае, Razor), а не к тому как получить несколько форм на одной странице. Внимательно читаем топики :) Вни-ма-тель-но. И вот такие советы "подучить хтмл и яваскрипт", лучше не раздавать, если не собираетесь уточнять, что же именно в этой тематике надо мне подучить.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140866
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНекоторые. Например идентификатор объекта в любой модели это Id . Еще есть часто использующееся поле Name в разных моделях, несущее одинаковую смысловую нагрузку. Получается, что они повторяются на странице.

Имхо потенциальные грабли, обычно даю уникальные имена.

hVosttНа сколько я понял народ справляется с проблемой ручным управлением рендеринга типа <input type="hidden" id="item[@i].Id" name="item[@i].Id" value="@p.Id" /> без Html.EditorFor/TextBoxFor (т.е. просто напросто лишает себя стандартных механизмов валидации и правильного формат-байндинга).

Да нет, пример для наглядности был. Для стандартных задач использую стандартные механизмы, и конечно типизированные хелперы, как же без них, но если что, не брезгую и обычной разметкой.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38140887
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
авторно также создает тупиковую ситуацию для скриптов, обращающихся к полям по #идентификаторам.

ну это кабы не тупиковая ситуация а банальная, все проблемы разруливаются селекторами jq
я так понимаю у вас id лежат в разных формах что мешает на форму из вьюхи навесить идентификатор
примерно так Html.BeginForm("Index", "Home",FormMethod.Post,new{id="ass1"})
а потом обыкновенным запросом выдернуть из него поле ввода по id
примерно так $('form[id = ass1] input[id = Id]')
это самый банальный вариант, есть более немного затратные варианты, есть еще как бы более виртуозные....
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38143052
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttНа странице несколько слабо связанных форм. Про слабо связанную форму имеется в виду, что они не относятся к одной модели, как вложенные. При генерации моделей стандартными средствами, поле Id, которое скрытое, которое генерируется в размеку <input id="Id" name="Id" type="hidden" /> объявляется более одно раза, что приводит к невалидному коду, что собственно не так уж и критично (при раздолбайском к этому отношению), но также создает тупиковую ситуацию для скриптов, обращающихся к полям по #идентификаторам.

Есть несколько путей решения этой проблемы:
все формы сделать вложенными в единую вью-модель

генерить формы полностью ручками

создать свои темплейты, генерирующие разметку стандартыми средствами, но "убивающими" стандартную генерацию id в AdditionalHtmlAttributes, подменяя на свою (допустим ModelName + "_" + FieldName)

Что посоветует уважаемое сообщество? Как лучше?

все когда-нибудь начинается снова


если бы вы потратили время на изучение работы MVC3 в частности движка Razor, то вы бы знали, что MVC для обработки используется name , а не Id , и более того, почти все методы типа @Html имеют перегруженные методы, которые позволяют задавать HTML атрибуты:) и в частности поменять Id:)

а

авторобращающихся к полям по #идентификаторам.

а это nocomment
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144070
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

если бы вы были повнимательнее и читали бы вопрос полностью, то увидили бы что об этом варианте я уже сказал (3 пункт) я спрашивал как лучше. и при чем тут name? речь идет только об идентификаторах. если вы знаете как быстрее обратить к элементам в js поделитесь открытием.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144207
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

в общем да, в селекторах можно ограничиться областью видимости формы. но. невалидно, жешь )
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144212
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
понятно что не валидно.... , а валидно иметь дубликат id на одной странице?
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144214
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,
если настаиваете на дубликате, можете сделать выборку напрямую, через пользовательские атрибуты, html5 это терпит
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144468
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttDeza,

если бы вы были повнимательнее и читали бы вопрос полностью, то увидили бы что об этом варианте я уже сказал (3 пункт) я спрашивал как лучше. и при чем тут name? речь идет только об идентификаторах. если вы знаете как быстрее обратить к элементам в js поделитесь открытием.

уйти от привязки к формам:) использовать ajax и и использовать в селекторе JQ className а не id:)
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144471
Deza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и вообще покажите пример кода, что б не строить догадки
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144512
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deza,

если я покажу вам пример кода, вы скажете, что сюда просится нормальный такой knockout, backbone или т.п. :) и будете правы между прочим. вопрос больше теоретический. такое ощущение, что mvc проектировали сохранив остатки древней идеологии веб-формс, одна страница -- одна форма, но в более-менее вменяемом приложений количество контроллеров и вьюх на каждую модель будет зашкаливать. можно генерить код T4 или динамически, но это уже изобретение какого-то кастомного веб формс поверх mvc, значит идеального ничего не существует )) не зря telerik ушёл от своего условно-бесплатного MVC фреймворка, переключившись на js mvc и webapi.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144513
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

вот именно. id генерируется по нехитрой технологии, зависящей напрямую от имени поля (и имени родительского поля при наличии), и нет способа сказать фреймворку, как тебе нужно генерировать Id. где-то в одном месте задать свою фабрику или переопределить метод. не нравится, затыкай своим id в new { id = "мойId" } в htmlAttributes, или пиши свои темплейты на все виды типов. в общем решение есть конечно, mvc крайне расширяемый и гибкий фреймворк, вот только далеко не все предусмотрели ) хотя это все имеет смысл, если всегда стремиться использовать стандартные инструменты.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144557
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38144646
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

@model ViewModel1
....
@Html.EditorForModel() — стандартно
@Html.Partial("_View2", new Model2()) — другая модель на той же странцие
@Html.Action("Edit", "Model3Controller") — при вложенном вызове контроллер отдаёт партиал, уже понимая, что его форму используют где-то в другом месте, значит нужен неймспейс в id

А вы привели пример обращение к одному и тому же свойству одной и той же модели. Конечно же в рамках одной модели хочется одинакового поведения. Если забить на валидность, то проблема как бы исчезает..
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Несколько форм на одной странице [MVC/Razor]
    #38615449
Denis2105
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, хотелось бы знать к какому решению ты пришел.
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38615743
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSergehVostt...Что посоветует уважаемое сообщество? Как лучше?...
Я не сообщество, но весьма рекомендую почитать как устроен HTTP. Возможно, вопросы отпадут сами собой.
Серж сцуко в своем репертуаре
...
Рейтинг: 0 / 0
Несколько форм на одной странице [MVC/Razor]
    #38615747
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis2105hVostt, хотелось бы знать к какому решению ты пришел.

замена стандартных хелперов, типа Html.TextBox (и т.д.) на свои собственные, которые, кстати, по-лучше будут во всех отношениях... ну и там естественно решается проблема с правильной генерацией id
...
Рейтинг: 0 / 0
25 сообщений из 99, страница 1 из 4
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Несколько форм на одной странице [MVC/Razor]
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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