Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание not submit кнопки 
:(
    Опции темы
Idsa
Дата 6.7.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Я только начинаю изучать ASP.NET... и вот столкнулся с такой проблемой: у меня не получается создать Command Button, т. к. все создаваемые мною кнопки становятся submit. Подскажите, что именно нужно сделать для того, чтобы кнопка не была submit (по умолчанию).
Вот что по этому поводу говорит MSDN:
Цитата

By default, a Button control is a Submit button. A Submit button does not have a command name (specified by the CommandName property) associated with the button and simply posts the Web page back to the server. You can provide an event handler for the Click event to programmatically control the actions performed when the Submit button is clicked.

A Command button has a command name associated with the button, such as Sort, by setting the CommandName property. This allows you to create multiple Button controls on a Web page and programmatically determine which Button control is clicked. You can also use the CommandArgument property with a command button to provide additional information about the command to perform, such as Ascending. You can provide an event handler for the Command event to programmatically control the actions performed when the Command button is clicked.



--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
tol05
Дата 6.7.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Idsa,  неважно как Button отрендерится, на сервере ведь это класс Button, а он имеет и CommandName и CommandArguments свойства. 
Если свойство UseSubmitBehavior кнопки установить в false 
<asp:button id="Button1" text="Submit" usesubmitbehavior="false" runat="server"/>
тогда кнопка будет рендериться не как 
Код

<input type="submit" name="Button1" value="Button" id="Button3" /> 
а как button
Код

<input type="button" name="Button1" value="Submit" onclick="javascript:__doPostBack('Button1','')" id="Button1" />

Но все равно кнопка будет осуществлять возврат на сервер, только через клиентский скрипт. И все равно, в сорцах браузера ты не увидишь ни CommandName, ни CommandArguments. Браузеры не могут обрабатывать все фичи ASP.NET. Да и зачем, если все обработчики CommandXXX ты все равно для сервера написал? smile

Задавать CommandName можно для всех кнопок класса Button (не важно, input type="submit" отрендерится, или  input type="submit", true или false cтоит UseSubmitBehavior). И обрабатывать событие Command тоже можно.
Код

<asp:Button ID="Button1" runat="server"  CommandName="Stop" Text="Button" OnClick="Button1_Click" />  
 
в любом случае, в обработчике на сервере sender - представляет опять же Button класс и у него будет CommandName="Stop"

Просто если где-то пишут об отличиях - имеют в виду отличия кнопок System.Web.UI.WebControls.Button от System.Web.UI.HtmlControls.HtmlInputButton, типа : "смотрите-ка, а ASP.NET все лучше и лучше становится! Вот вам очередной вариант многострадальных кнопок, вроде ... те же, ан-нет! Гораздо круче!"
 smile 


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Idsa
Дата 7.7.2007, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



tol05, а в чем тогда отличия двух вариантов: UseSubmitBehavior=true и UseSubmitBehavior=false? Если отличия только в спобосе вызова postback'а, то второй вариант вообще не стоит использовать (ведь по статистике у 10% пользователей отключен JS). В чем подвох?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
tol05
Дата 7.7.2007, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Преймущества - в скриптах, конечно
Цитата

When the UseSubmitBehavior property is false, control developers can use the GetPostBackEventReference method to return the client postback event for the Button. The string returned by the GetPostBackEventReference method contains the text of the client-side function call and can be inserted into a client-side event handler.
отсюда

и вот, еще пример оттуда же подправил
Код

<asp:button id="Button1"
      text="Button1"
      onclick="Submit1Btn_Click" 
      usesubmitbehavior="false"
      runat="server" OnClientClick="Navigate()"/> 

<asp:button id="Button2"
      text="Button2"
      onclick="Submit2Btn_Click" 
      runat="server" OnClientClick="Navigate()"/>      

<br /><br /> 

<asp:label id="Message" runat="server"/>

<br /><br />

Код

protected void Submit2Btn_Click(object sender, EventArgs e)
    {
        Message.Text = "2 Hello World!";
    }
    
    protected void Submit1Btn_Click(object sender, EventArgs e)
    {
        Message.Text = "1 Hello World!";    
    }



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Mymik
Дата 8.7.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(tol05 @  7.7.2007,  22:54 Найти цитируемый пост)
и вот, еще пример оттуда же подправил
А что за Navigator() функция ???

Цитата(Idsa @  7.7.2007,  21:10 Найти цитируемый пост)
(ведь по статистике у 10% пользователей отключен JS).
А можно узнать откуда такие данные ??? Врядли эта цифра столь велика. (в данном случаи 10% это действительно большая цифра.)


Idsa, если ты не хочешь делать submit данных на сервер, но хочешь просто иметь кнопку, тогда пиши 
Код

<input type="button" />

Если хочешь иметь доступ к ней на сервере, тогда допиши туда runat="server"
Код

<input type="button" runat="server" />


Ну или скажи зачем тебе CommangName и CommanArgument в обычной кнопке ??? Они все равно не делают submit (если не заставить), ну а если заставить решил, так туда можно передать аргументы... 



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Idsa
Дата 8.7.2007, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Mymik @  8.7.2007,  22:08 Найти цитируемый пост)
А можно узнать откуда такие данные ???

Недавно я читал статейку или блог... не помню уже. Автор критиковал подход 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


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
tol05
Дата 9.7.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



Цитата(Idsa @  8.7.2007,  22:52 Найти цитируемый пост)
Правильно ли я понимаю

нет, неправильно. Все кнопки класса System.Web.UI.WebControls.Button (в отличие от System.Web.UI.HtmlControls.HtmlInputButton) обладают свойствами CommandName И CommandArguments. Просто в зависимости от   UseSubmitBehavior они отрендерятся как submit или button. Браузер понимает только это. А все остальное - уже на сервере, после возврата. Копка создается заново, из ControlState смотрится - нажата она была или нет, было ли у нее что-то в CommandName или нет. 



Цитата(Idsa @  8.7.2007,  22:52 Найти цитируемый пост)
обработка события Command (и его отличие от Click)

"Button.Command Event   -  Occurs when the Button control is clicked. " т.е. на клик генерируется ДВА события, просто с разными EventArgs. И в обработчике события Command ты можешь из полученных аргументов вытянуть CommandName и CommandArgument и использовать их как хочешь. Можно и Click обрабатывать дополнительно. Парни из MS просто хотели подарок сделать... Еще одно событие для любознательных (кому побольше от кнопки инфы нужно, всякие там CommandName и CommandArgument).

И как люди раньше без этого счастья жили?..


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Idsa
Дата 9.7.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Все потихоньку становится на свои места...
Однако хотелось бы разрешить вопрос, где хранятся эти самые CommandName и CommandArguments, ведь в тэге <input type=button...> им нет места smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
tol05
Дата 9.7.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 34
Всего: 170



а где хранятся все ASP.NET свойства, фичи, которые разрекламированы на каждом углу? Ведь в HTML-разметке браузера ничего не добавилось (браузеры разные да и Web-технологий до фига, у каждой - свои фичи...)

1. Если фича может переопределиться программно где угодно, то данные шифруются и складываются в ViewState и ControlState. При постбеке - расшифровываются, учитываются при инициализации.
2. Если  может может переопределиться программно, но только до начала анализа ViewState (как темы, мастер-страницы например) - то нигде. А зачем запоминать, при следующей инициализации из кода возьмем данные.
3. Если не переопределиться программно (только как атрибут) - тоже нигде по той же причине, что и п.2

Рефлектор->Button->CommandArgument
Код

public void set_CommandArgument(string value)
{
    this.ViewState["CommandArgument"] = value;
}

smile


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Idsa
Дата 12.7.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Хех... Значит с отключенным ViewState работать эта "фишка" не будет?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.