![]() |
|
Модераторы: gambit |
![]()
|
|
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Я только начинаю изучать ASP.NET... и вот столкнулся с такой проблемой: у меня не получается создать Command Button, т. к. все создаваемые мною кнопки становятся submit. Подскажите, что именно нужно сделать для того, чтобы кнопка не была submit (по умолчанию).
Вот что по этому поводу говорит MSDN:
|
|||
|
||||
| tol05 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 34 Всего: 170 |
Idsa, неважно как Button отрендерится, на сервере ведь это класс Button, а он имеет и CommandName и CommandArguments свойства.
Если свойство UseSubmitBehavior кнопки установить в false <asp:button id="Button1" text="Submit" usesubmitbehavior="false" runat="server"/> тогда кнопка будет рендериться не как
Но все равно кнопка будет осуществлять возврат на сервер, только через клиентский скрипт. И все равно, в сорцах браузера ты не увидишь ни CommandName, ни CommandArguments. Браузеры не могут обрабатывать все фичи ASP.NET. Да и зачем, если все обработчики CommandXXX ты все равно для сервера написал? Задавать CommandName можно для всех кнопок класса Button (не важно, input type="submit" отрендерится, или input type="submit", true или false cтоит UseSubmitBehavior). И обрабатывать событие Command тоже можно.
в любом случае, в обработчике на сервере sender - представляет опять же Button класс и у него будет CommandName="Stop" Просто если где-то пишут об отличиях - имеют в виду отличия кнопок System.Web.UI.WebControls.Button от System.Web.UI.HtmlControls.HtmlInputButton, типа : "смотрите-ка, а ASP.NET все лучше и лучше становится! Вот вам очередной вариант многострадальных кнопок, вроде ... те же, ан-нет! Гораздо круче!" -------------------- На хорошей работе и сны хорошие снятся. |
||||||
|
|||||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
tol05, а в чем тогда отличия двух вариантов: UseSubmitBehavior=true и UseSubmitBehavior=false? Если отличия только в спобосе вызова postback'а, то второй вариант вообще не стоит использовать (ведь по статистике у 10% пользователей отключен JS). В чем подвох?
|
|||
|
||||
| tol05 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 34 Всего: 170 |
Преймущества - в скриптах, конечно
и вот, еще пример оттуда же подправил
-------------------- На хорошей работе и сны хорошие снятся. |
||||||
|
|||||||
| Mymik |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 50 Всего: 78 |
А что за Navigator() функция ???
А можно узнать откуда такие данные ??? Врядли эта цифра столь велика. (в данном случаи 10% это действительно большая цифра.) Idsa, если ты не хочешь делать submit данных на сервер, но хочешь просто иметь кнопку, тогда пиши
Если хочешь иметь доступ к ней на сервере, тогда допиши туда runat="server"
Ну или скажи зачем тебе CommangName и CommanArgument в обычной кнопке ??? Они все равно не делают submit (если не заставить), ну а если заставить решил, так туда можно передать аргументы... -------------------- |
||||
|
|||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Недавно я читал статейку или блог... не помню уже. Автор критиковал подход ASP.NET делать submit'ы искусственно (через JS). Мол, многие "программистры" и не подозревают об этой особенности, и они будут жутко удивлены, что при отключении JS их страницы перестанут работать. И чтобы подтвердить масштабность этого "бага", привел количество пользователей с отключенным JS - 10%. Не удивлюсь, если цифра была преувеличена, дабы критика выглядела убедительней. Вернемся к теме. На данный момент я понял следующее. <asp:Button> (Web-кнопка) в любом случае осуществляет submit (напрямую или косвенно). Для использования not submit кнопки необходимо использовать <input type=button> (HTML-кнопка). Также я понял фактическую разницу в значениях UseSubmitBehavior. Теперь вопросы. Вначале я приводил выдержку из MSDN, где говорилось о Submit Buttons и Command Buttons. Правильно ли я понимаю, что Submit Buttons - кнопки с UseSubmitBehavior == true, а Command Buttons - с UseSubmitBehavior == false? Также непонятным для меня остается обработка события Command (и его отличие от Click) и использование CommandName и CommandArgument :( Это сообщение отредактировал(а) Idsa - 8.7.2007, 23:34 |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 34 Всего: 170 |
нет, неправильно. Все кнопки класса System.Web.UI.WebControls.Button (в отличие от System.Web.UI.HtmlControls.HtmlInputButton) обладают свойствами CommandName И CommandArguments. Просто в зависимости от UseSubmitBehavior они отрендерятся как submit или button. Браузер понимает только это. А все остальное - уже на сервере, после возврата. Копка создается заново, из ControlState смотрится - нажата она была или нет, было ли у нее что-то в CommandName или нет. "Button.Command Event - Occurs when the Button control is clicked. " т.е. на клик генерируется ДВА события, просто с разными EventArgs. И в обработчике события Command ты можешь из полученных аргументов вытянуть CommandName и CommandArgument и использовать их как хочешь. Можно и Click обрабатывать дополнительно. Парни из MS просто хотели подарок сделать... Еще одно событие для любознательных (кому побольше от кнопки инфы нужно, всякие там CommandName и CommandArgument). И как люди раньше без этого счастья жили?.. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Все потихоньку становится на свои места...
Однако хотелось бы разрешить вопрос, где хранятся эти самые CommandName и CommandArguments, ведь в тэге <input type=button...> им нет места |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 34 Всего: 170 |
а где хранятся все ASP.NET свойства, фичи, которые разрекламированы на каждом углу? Ведь в HTML-разметке браузера ничего не добавилось (браузеры разные да и Web-технологий до фига, у каждой - свои фичи...)
1. Если фича может переопределиться программно где угодно, то данные шифруются и складываются в ViewState и ControlState. При постбеке - расшифровываются, учитываются при инициализации. 2. Если может может переопределиться программно, но только до начала анализа ViewState (как темы, мастер-страницы например) - то нигде. А зачем запоминать, при следующей инициализации из кода возьмем данные. 3. Если не переопределиться программно (только как атрибут) - тоже нигде по той же причине, что и п.2 Рефлектор->Button->CommandArgument
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Хех... Значит с отключенным ViewState работать эта "фишка" не будет?
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка под ASP.NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |