powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Sender
21 сообщений из 21, страница 1 из 1
Sender
    #38419919
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я привязал две кнопки к одному методу, подскажите как узнать какая кнопка вызвала метод?

вот пытаюсь сделать но запутался
Код: c#
1.
2.
3.
4.
5.
6.
7.
if (sender is Button)
{
if ((sender as Button).ID.ToLower() == "btnID"
{
//обработать
}
}



Спасибо.
...
Рейтинг: 0 / 0
Sender
    #38419941
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гляньте под дебагом на этот sender
...
Рейтинг: 0 / 0
Sender
    #38419960
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганель,

все разобрался
...
Рейтинг: 0 / 0
Sender
    #38419964
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

... у кнопки можно использовать свойство CommandName ... а в обработчике соответственно

Код: c#
1.
2.
3.
switch(e.CommandName)
         {
}



http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.button.commandname.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3
...
Рейтинг: 0 / 0
Sender
    #38419997
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikVIT2708,

... у кнопки можно использовать свойство CommandName ... а в обработчике соответственно

Код: c#
1.
2.
3.
switch(e.CommandName)
         {
}



http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.button.commandname.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3

Оно как раз занято другим значением так как кнопка находится внутри repeater
...
Рейтинг: 0 / 0
Sender
    #38420052
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

интересно - зачем? а если каждой кнопке дать по методу? и не надо выяснять кто вызвал.
...
Рейтинг: 0 / 0
Sender
    #38420079
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUVIT2708,

интересно - зачем? а если каждой кнопке дать по методу? и не надо выяснять кто вызвал.

CommandName присваиваю id записи в базе
CommandArgument - значение доступно/недоступно (знаю можна через хранимую процедуру все сделать)
...
Рейтинг: 0 / 0
Sender
    #38420093
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708CommandName присваиваю id записи в базе
CommandArgument - значение доступно/недоступновы не перепутали?
...
Рейтинг: 0 / 0
Sender
    #38420096
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUVIT2708,

интересно - зачем? а если каждой кнопке дать по методу? и не надо выяснять кто вызвал.
а зачем каждой давать по методу, если делают они одно и тоже?
...
Рейтинг: 0 / 0
Sender
    #38420103
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZoriamonstrUVIT2708,

интересно - зачем? а если каждой кнопке дать по методу? и не надо выяснять кто вызвал.
а зачем каждой давать по методу, если делают они одно и тоже?

они передают в ХР id записи и блокировать/не блокировать
...
Рейтинг: 0 / 0
Sender
    #38420120
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Паганельвы не перепутали?
да в принципе все равно что куда писать. но "красивше" было бы наоборот, аргумент всегда разный а команда типа да:нет :)

VIT2708они передают в ХР id записи и блокировать/не блокировать
да это мне понятно, это я не вам отвечала, а на вопрос
monstrUинтересно - зачем? а если каждой кнопке дать по методу? и не надо выяснять кто вызвал
...
Рейтинг: 0 / 0
Sender
    #38420124
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708
Код: c#
1.
ID.ToLower() == "btnID"



нормально так сравнил )
...
Рейтинг: 0 / 0
Sender
    #38420131
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

.. так CommandArgument можно делать составным (через Eval), а потом сплиттить .. Но это дело вкуса ...
...
Рейтинг: 0 / 0
Sender
    #38420195
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонVIT2708
Код: c#
1.
ID.ToLower() == "btnID"



нормально так сравнил )

бывает
...
Рейтинг: 0 / 0
Sender
    #38420513
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708Zoriaпропущено...

а зачем каждой давать по методу, если делают они одно и тоже?

они передают в ХР id записи и блокировать/не блокировать

а вот и нет - тут присутствуют две операции
1. включить блокировку
2. отключить блокировку
операции на уровне бизнес логики разные, выносить нужно в разные методы.
и ничего, что эти обе операции выполняются одной и той же stored procedure.

в кнопку для включения в CommandArgument указать 1.
в кнопку для выключения передать 0.
в обработчике каждой кнопки получить нужное значение
bool isBlock;
и вот там уже вызвать cs метод BlockRecord(isBlock);
как то вот так.
благодаря этому тот человек, что будет работать с вашей страницей, поймет, что делает ваш обработчик события Command без поиска контрола с идентификатором btnIdи выяснением того, зачем он размещен
...
Рейтинг: 0 / 0
Sender
    #38420534
Zoria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUVIT2708пропущено...


они передают в ХР id записи и блокировать/не блокировать

а вот и нет - тут присутствуют две операции
1. включить блокировку
2. отключить блокировку
операции на уровне бизнес логики разные, выносить нужно в разные методы.
и ничего, что эти обе операции выполняются одной и той же stored procedure.

в кнопку для включения в CommandArgument указать 1.
в кнопку для выключения передать 0.
в обработчике каждой кнопки получить нужное значение
bool isBlock;
и вот там уже вызвать cs метод BlockRecord(isBlock);
как то вот так.
благодаря этому тот человек, что будет работать с вашей страницей, поймет, что делает ваш обработчик события Command без поиска контрола с идентификатором btnIdи выяснением того, зачем он размещен
спасибо за урок, я наконец-то начала что-то понимать в бизнеслогике. :)
...
Рейтинг: 0 / 0
Sender
    #38420800
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUVIT2708пропущено...


они передают в ХР id записи и блокировать/не блокировать

а вот и нет - тут присутствуют две операции
1. включить блокировку
2. отключить блокировку
операции на уровне бизнес логики разные, выносить нужно в разные методы.
и ничего, что эти обе операции выполняются одной и той же stored procedure.

в кнопку для включения в CommandArgument указать 1.
в кнопку для выключения передать 0.
в обработчике каждой кнопки получить нужное значение
bool isBlock;
и вот там уже вызвать cs метод BlockRecord(isBlock);
как то вот так.
благодаря этому тот человек, что будет работать с вашей страницей, поймет, что делает ваш обработчик события Command без поиска контрола с идентификатором btnIdи выяснением того, зачем он размещен

1. включить блокировку
2. отключить блокировку

зачем 2 операции когда через один параметр можна передать true или false через второй id
...
Рейтинг: 0 / 0
Sender
    #38421218
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrU
благодаря этому тот человек, что будет работать с вашей страницей, поймет, что делает ваш обработчик события Command без поиска контрола с идентификатором btnId и выяснением того, зачем он размещен
VIT2708 1. включить блокировку
2. отключить блокировку

зачем 2 операции когда через один параметр можна передать true или false через второй id

я все уже написал - для упрощения поддержки.
через годик кто то будет вашу страницу развивать, и существенно понятнее, когда есть метод BlockRecord, а не кнопка с ничего не говорящим названием btnID в которой в CommandArgument зачем то вбито 0, а в кнопку btnID2 зачем то вбито 1.
хочу обратить внимание, этом кто то вы сами можете оказаться.
еще вопрос - если операция блокировки должна выполняться не только на сайте, а еще и в другом приложении ? в windows сервисе например ? снова будете откуда то получать 0 или 1 и вызывать хранимку ?
архитектура web+windows сервис часто встречается.
так что более того, это метод BlockRecord должен быть вынесен в отдельную библиотеку, тогда вы эту бизнес логику сможете использовать в любых приложениях.
если вы делаете как делаете, то развивать будет такую страницу крайне трудно.
надо стараться делать так, чтобы код был понятен сам по себе.
...
Рейтинг: 0 / 0
Sender
    #38421616
VIT2708
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
monstrUmonstrUблагодаря этому тот человек, что будет работать с вашей страницей, поймет, что делает ваш обработчик события Command без поиска контрола с идентификатором btnId и выяснением того, зачем он размещен
VIT2708 1. включить блокировку
2. отключить блокировку

зачем 2 операции когда через один параметр можна передать true или false через второй id

я все уже написал - для упрощения поддержки.
через годик кто то будет вашу страницу развивать, и существенно понятнее, когда есть метод BlockRecord, а не кнопка с ничего не говорящим названием btnID в которой в CommandArgument зачем то вбито 0, а в кнопку btnID2 зачем то вбито 1.
хочу обратить внимание, этом кто то вы сами можете оказаться.
еще вопрос - если операция блокировки должна выполняться не только на сайте, а еще и в другом приложении ? в windows сервисе например ? снова будете откуда то получать 0 или 1 и вызывать хранимку ?
архитектура web+windows сервис часто встречается.
так что более того, это метод BlockRecord должен быть вынесен в отдельную библиотеку, тогда вы эту бизнес логику сможете использовать в любых приложениях.
если вы делаете как делаете, то развивать будет такую страницу крайне трудно.
надо стараться делать так, чтобы код был понятен сам по себе.

Вы меня немного не поняли никаких 0 или 1 на кнопке нет вот кусок кода разметки и codebehind

aspx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<asp:Repeater ID="rTlist" runat="server">
...
<asp:Button ID="btnEdit" runat="server" Text='<%# SourceBlock(Container.DataItem) %>' 
                               CommandName='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                               CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Block")%>' 
                               OnCommand="bEdit_Command" CssClass="button" Width="120" />

...
</asp:Repeater>




cs

//ф-я упростил для примера SourceBlock
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
protected string SourceBlock(object dataitem)
    {
        int block = int.Parse(DataBinder.Eval(dataitem, "Block").ToString());

        if (block)
            return "заблокирован";
        else
            return "разблокирован";
    }
...
Рейтинг: 0 / 0
Sender
    #38421653
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

..вы, кстати, подумайте над составным аргументом, а то появится третий параметр, мало ли, куда пихать будете?

http://stackoverflow.com/questions/6939009/how-to-send-multiple-command-arguments-through-command-button-rowcommand-event

...и CommandName освободится ...
...
Рейтинг: 0 / 0
Sender
    #38422417
monstrU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VIT2708,

ваше решение понятно - можно использовать на один день. ну я бы так сделал.
только вот писал я о последствиях такого решения.
сейчас буду предсказывать будущее :).
через год вам начальник дает задание - к этому сайту добавить windows сервис. одним из функционалов будет включение и выключение блокировки.
за год вы совершенно забыли, что у вас эта бизнес операция уже была реализована, и написали метод для блокировок
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
protected string SourceBlock(object dataitem)
    {
        int block = <как-нибудь>;

        if (block)
            return "заблокирован администратором";
        else
            return "разблокирован  администратором";
    }


через неделю вашего начальника вызывает к себе директор и предъявляет ему отчет, в котором суммы не совпадают с другими проверочными суммами.
выяснение причин показывает, что числа отчета начали расходиться из-за того, что некоторые записи были заблокированы операций "заблокирован" , а некоторые записи заблокированы операцией "заблокирован администратором".
минимальные последствия для вас буду, если скажут быстро переделать, максимальные - любые.
так что писать надо так, как будто вам это приложение поддерживать еще 5 лет дальше.
приложение, разработанное в вашем стиле, поддерживать трудно.
что будет, если это windows сервис будет делать другой человек?
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Sender
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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