Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Как отметить checkbx по клику на строку таблицы?  (Прочитано 62680 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 25-03-2011 10:46 » 

Судя по коду, серверная часть пишется на C# - вероятно ASP.NET. В этом случае не надо ничего вручную анализировать в RequestString. Нужно правильно запрограммировать действия и, в первую очередь, инициализацию дочерних контролов на форме.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 25-03-2011 10:54 » 

Dimka, я не знаю C# - ASP.NET

тогда подскажи, и мне, как это правильно
запрограммировать действия

или объясни, кто будет анализировать REQUEST?

и...
произошла автоматическая генерация id контрола (элемента), мне нужно с помощью js скрипта добраться до этого элемента по id, откуда я узнаю его id в коде C#

ps мне это не нужно... так на всякий случай, и описал существующую ситуацию у ТС
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #32 : 25-03-2011 11:15 » 

Это немного не так работает. ASP контрол создаётся на сервере и для него генерится HTML код. Все универсальные ClientID тоже создаются там, и через них сервер узнаёт контрол, отправивший сообщение (обрабатывает REQUEST). После этого он вызывает зарегистрированный обработчик для данного сообщения в C# коде. По окончании работы обработчика, сервер обновляет HTML код с учётом изменённых в обработчике данных, в котором, например, чекбокс = true. Если честно, то я тоже не понимаю, зачем при работе с ASP.NET мутить что-то с JS? GridView великолепно отправляет сообщения о своих Item-ах, а в C# работать ИМХО гораздо удобней.

Добавлено через 18 минут и 37 секунд:
Вот так, к примеру выглядит код для грида с кнопкой в каждой строке для удаления текущей позиции:

Код: (ASP)
                       
            <asp:TemplateField ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center"
                    ItemStyle-BorderWidth="1px" HeaderStyle-BorderWidth="1px" FooterStyle-BorderWidth="0px">
                <ItemTemplate>
                      <asp:ImageButton ImageUrl="Images/cart_remove_btn.png" runat="server" ID="_remove"
                                                CommandName="Remove" CommandArgument='<%# Eval("Id") %>' />
                 </ItemTemplate>
             </asp:TemplateField>


А вот обработчик:

Код: (C#)
        protected void _gridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
                if (e.CommandName == "Remove")
                {
                        MyViewModel.Remove(e.CommandArgument.ToString());
                }
        }

И всё. Не надо с JS отыскивать кнопку, и тд и тп.
« Последнее редактирование: 25-03-2011 12:07 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 25-03-2011 12:00 » 

Разве что следует отметить, что из-за вложенности контролов и их автоматического повтора следует различать содержимое поля ID (это для сервера) и ClientID (это для JS). Второе поле хранит более сложный автоматически генерируемый идентификатор, уникальный в пределах HTML.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #34 : 25-03-2011 12:07 » 

Да, конечно. Это как раз те самые "сложные" Id уже упомянутые Okkkks, например  "ctl00_ContentPlaceHolder1_gvCategory_ctl02_cbSelect".
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #35 : 25-03-2011 13:17 » 

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

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #36 : 25-03-2011 13:30 » 

Слав, я думаю тут немного другая философия подхода. Зачем тебе нужно знать этот ClientId? Это часть контрола, который, да, будет представлен сервером в виде HTML кода (а как же иначе?). Но тебе зачем в него вникать? Всё, что нужно ты можешь сделать на сервере. А поменяв что-то не то у клиент, ты рискуешь прервать связь с объектом на сервере.
« Последнее редактирование: 25-03-2011 13:31 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #37 : 25-03-2011 14:18 » 

Мы говорим об web интерфейсе
Например,
мне нужно повесить обработчик js на событие onchange
при этом, если true (напрмиер, маскируемый ввод), то изменить состояние control  type=hidden на type=text

Как?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #38 : 25-03-2011 14:32 » 

Слав, давай уточним, на onchage ASP.NET контролла? Я вот про что говорю. Ведь у него такое событие обрабатывается на сервере, в C# коде.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #39 : 25-03-2011 14:47 » 

Web > Клиентские скрипты

Это тема

Следовательно, когда браузер получил html контент, то он уже ничего не знает о сервере (если не принимать особых усилий)

<input type=chekbox id=check1 onchange=func(text1)>
<input type=hidden id=text1>
<scriot>
function func(id){
getElementById(text1).type="text";
}
</script>

Вот, например, такое решение хотела видеть ТС

Как ты предлагаешь сделать такое?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #40 : 25-03-2011 15:38 » 

Ну... дык. То что вопрос задан в этой теме, ещё не показатель того, что поиск решения идёт в верном направлении. Может у человека просто не хватает опыта с ASP.NET, а JS она знает хорошо, вот и пытается применить имеющиеся знания. Поэтому я предлагаю делать это на стороне сервера и не мешать все существующие способы манипулирования контента. Личное моё мнение ессно.

зы Опять же ИМХО, я не исключаю ситуации, когда такое может и придётся делать, запускать клиенсткий скрипт с серверными элементами. Но тогда усилия должны себя оправдывать. Скажем так, безвыходная ситуация, время поджимает и тп. Тогда можно попробовать пофантазировать без 100% гарантии на успех, о том как формируются ClientID, пока логика просматривается довольно чётко:

ctl00 -> ContentPlaceHolder1 -> gvCategory -> ctl02 -> cbSelect

Ну как-то так. Но в данном случае можно легко обойтись без этого.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #41 : 25-03-2011 17:50 » 

Цитата: Sla
изменить состояние control  type=hidden на type=text
Я не проверял, но на 90% уверен, что ASP.NET этого не переживёт, если страница описана статически. Хотя там тоже можно исхитриться, поскольку есть иерархия контролов.

Цитата: Sla
а каким образом они попадают в клиентский код, при условии что мне нужно именно уникальный, заранее известный, т.е. ClientId
Я делаю серверными вставками Улыбаюсь В aspx/ascx файле прописать скрипт с нужной обёрточной функцией
Код: (HTML)
<SCRIPT type="text/javascript">
  function foo()
  {
    var element = document.getElementById("<%= this.myControl.ClientID %>");
    // ...
  }
</SCRIPT>
При генерации HTML вставка заменится на магический идентификатор.

Но на самом деле у контролов есть свойства вроде OnClientClick.
« Последнее редактирование: 25-03-2011 17:56 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 25-03-2011 19:49 » 

Цитата: Sla
изменить состояние control  type=hidden на type=text
Я не проверял, но на 90% уверен, что ASP.NET этого не переживёт, если страница описана статически. Хотя там тоже можно исхитриться, поскольку есть иерархия контролов.
А причем здесь ASP.NET?
Может мы говорим о разных вещах?

Есть web-сервер - отдает html контент
есть приложение - принимает html контент (браузер) Обрабатывает его своим внутренним языком, пусть это будет js)
И отдает запрос в виде REQUEST серверу. Кто не переживет?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #43 : 26-03-2011 07:41 » 

Sla, по-моему, говорить о сервере вообще - это то же самое, что говорить о сферическом коне в вакууме.

Мы же не протокол HTTP обсуждаем и т.п., мы обсуждаем то, как создать приложение. А приложение работает в рамках той или иной технологии, которая инкапсулирует HTTP, REQUEST и отчасти JS в браузере (по крайней мере предоставляет свой framework) и т.д. Например, ASP.NET так делает. Почему заговорили про ASP.NET - потому что приведённый выше код серверной стороны написан на C#.

Говорить про RequestString - всё равно, что говорить о WinAPI. Да, оно есть, но львиная доля приложений строится на базе надстроек над WinAPI, а не на голом WinAPI.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Okkkks
Помогающий

by
Offline Offline

« Ответ #44 : 29-03-2011 09:44 » 

Ребята, задача изначально была такая:
Нужно выделять/снимать выделение чекбокса,который находится в таблице, кликая не по самому чекбоксу, а по строке в таблице. Как это сделать на стороне сервера да так чтоб это не пидалило на каждом шагу я не придумала. Да и мне всегда казалось, что для этого и придумали скрипт =)) (знаю его кстати весьма поверхностно =(((  )  вот поэтому собственно скрипт...
Если вы знаете как эта задача решается на сервере расскажите мне пжалста =))

на данный момент:
 автогенерация айдишника отключена (ID=ClientID=cbSelect), но при создании строк таблицы я модифицирую айдишники добавляя к ним № строки, для того, чтоб легче было искать потом в html  (ClientID=cbSelect№).
скрипт отрабатывает как надо, всё выделяется/снимается выделение, но теперь я похоже "потеряла связь сервера с контролом". Сервер не видит отмеченые чекбоксы =(( и как тут выкрутится не знаю.... =(( ничё не получается =((
« Последнее редактирование: 29-03-2011 12:10 от Okkkks » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 29-03-2011 13:16 » 

Цитата: Okkkks
Как это сделать на стороне сервера да так чтоб это не пидалило на каждом шагу я не придумала.
Никак. Чтобы это происходило на сервере, нужно именно послать на сервер форму.

Уменьшить объём передаваемых данных можно через AJAX. Но в общем и целом эта задача решается клиентским скриптом.

Цитата: Okkkks
автогенерация айдишника отключена (ID=ClientID=cbSelect), но при создании строк таблицы я модифицирую айдишники добавляя к ним № строки, для того, чтоб легче было искать потом в html  (ClientID=cbSelect№).
скрипт отрабатывает как надо, всё выделяется/снимается выделение, но теперь я похоже "потеряла связь сервера с контролом". Сервер не видит отмеченые чекбоксы =(( и как тут выкрутится не знаю.... =(( ничё не получается =((
Потому что нельзя "отключать" автогенерацию ID. Напиши скрипт, который использует реальные автоматически сгенерированные ID (пример серверной вставки я давал).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Okkkks
Помогающий

by
Offline Offline

« Ответ #46 : 29-03-2011 13:51 » 

Dimka,  спасибо =) есть пара мыслей =))
Записан
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines