доступ к <input> из C#
От: Аноним  
Дата: 07.03.07 08:43
Оценка:
подскажите, как в коде C# получить доступ к клиентскому элементу (например, <input type='hidden'>), а затем исполнить java-скрипт, который бы брал значение из инпута ?? заранее благодарен
Re: доступ к <input> из C#
От: leleophan  
Дата: 07.03.07 09:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>подскажите, как в коде C# получить доступ к клиентскому элементу (например, <input type='hidden'>), а затем исполнить java-скрипт, который бы брал значение из инпута ?? заранее благодарен


Пометить input аттрибутом runat="server" и задать ему id:

<input id="myCtrl" runat="server" type="hidden" />


тогда на сервере можно обратиться так:

String myValue = myCtrl.value;


если контрол не делать серверным, то значение будет доступно в коллекцию Request.Params по индексатору, заданному аттрибутом name контрола.

на клиенте:
<input type="hidden" name="myCtrlName" />


на сервере:

String myValue = Request["myCtrlName"];


если даже не делать контрол ни серверным, ни задвать ему аттрибут name, то значение всеравно будет доступно из вышеупомянтой коллекции через целочисленный индексатор, но в общем случае индекс, по понятным причинам негопределен, а по сему, практического смысла в этом я не вижу.
Re[2]: доступ к <input> из C#
От: starnov  
Дата: 07.03.07 09:48
Оценка:
Здравствуйте, leleophan, Вы писали:

L>на сервере:


L>
L>String myValue = Request["myCtrlName"];
L>


получается, что на сервере я могу только читать, а изменять не могу? т.е. вопрос такой — можно ли изменить значение myCtrl.value из C#?
Re[2]: доступ к <input> из C#
От: starnov  
Дата: 07.03.07 09:50
Оценка:
мне нужно данные из базы передать странице и записать их в input, для того, чтобы скрипт взял оттуда данные и выполнил какую-то процедуру
Re[3]: доступ к <input> из C#
От: leleophan  
Дата: 07.03.07 09:51
Оценка:
Здравствуйте, starnov, Вы писали:

S>получается, что на сервере я могу только читать, а изменять не могу? т.е. вопрос такой — можно ли изменить значение myCtrl.value из C#?


конечно можно, если он серверный (помечен аттрибутом runat="server"):

myCtrl.value = "Preved Medved!";
Re[3]: доступ к <input> из C#
От: leleophan  
Дата: 07.03.07 10:02
Оценка:
S>мне нужно данные из базы передать странице и записать их в input, для того, чтобы скрипт взял оттуда данные и выполнил какую-то процедуру

ок. Теперь все прояснилось.

Когда помечаешь делаешь тэг серверным, то его идентификатор на клиентской машине далек от того, какой ты присвоишь ему аттрибутом "ID". Значение клинетского ID содержится в свойстве твоего контрола ClientID. Соответственно, присваиваешь на сервере скрытому полю то значение, которое хочешь, а в клиентском скрипте пишешь так:

<script type="text/jscript">
function processValue()
{
var hInput = document.getElementById("<%= myCtrl.ClientID %>");
alert(hInput.value);
}
</script>


вместо конструкции, заключенной спец.тэгами "<%= ... %>" сервем подставит действительное значение клиентского ID твоего контрола.
Re[4]: доступ к <input> из C#
От: starnov  
Дата: 07.03.07 10:11
Оценка:
Здравствуйте, leleophan, Вы писали:

S>>мне нужно данные из базы передать странице и записать их в input, для того, чтобы скрипт взял оттуда данные и выполнил какую-то процедуру


L>ок. Теперь все прояснилось.


L>Когда помечаешь делаешь тэг серверным, то его идентификатор на клиентской машине далек от того, какой ты присвоишь ему аттрибутом "ID". Значение клинетского ID содержится в свойстве твоего контрола ClientID. Соответственно, присваиваешь на сервере скрытому полю то значение, которое хочешь, а в клиентском скрипте пишешь так:


L>
L><script type="text/jscript">
L>function processValue()
L>{
L>var hInput = document.getElementById("<%= myCtrl.ClientID %>");
L>alert(hInput.value);
L>}
L></script>
L>


L>вместо конструкции, заключенной спец.тэгами "<%= ... %>" сервем подставит действительное значение клиентского ID твоего контрола.


громаднейшее спасибо! чую, должно заработать) сейчас попробую
еще раз спасибо!
Re[4]: доступ к <input> из C#
От: starnov  
Дата: 07.03.07 11:09
Оценка: :)
Здравствуйте, leleophan, Вы писали:

еще вопрос один возник. вы не знаете случайно, как можно на кнопку <input type="button" runat="server"> либо <asp:Button> повесить событие OnClick, чтобы сначала выполнялся серверный код (C#, выборка данных из базы и записать в hidden'ы), а только затем — клиентский onclick (либо какой-то альтернативный вызов JavaScript-функции) ? заранее благодарен
Re[5]: доступ к <input> из C#
От: leleophan  
Дата: 07.03.07 11:28
Оценка:
S>еще вопрос один возник. вы не знаете случайно, как можно на кнопку <input type="button" runat="server"> либо <asp:Button> повесить событие OnClick, чтобы сначала выполнялся серверный код (C#, выборка данных из базы и записать в hidden'ы), а только затем — клиентский onclick (либо какой-то альтернативный вызов JavaScript-функции) ? заранее благодарен

Тогда не вешай на кнопку никаких клиентских обработчиков. В серверном событии OnClick после заполнения контрола данными:

ClientScriptManager scriptManager = Page.ClientScript;
scriptManager.RegisterStartupScript(this.GetType(), "scriptKey", "myClientFunctionName()", true);
Re[6]: доступ к <input> из C#
От: starnov  
Дата: 07.03.07 11:54
Оценка:
Здравствуйте, leleophan, Вы писали:

L>
L>ClientScriptManager scriptManager = Page.ClientScript;
L>scriptManager.RegisterStartupScript(this.GetType(), "scriptKey", "myClientFunctionName()", true);
L>


странно очень. попробовал так, как вы посоветовали, пишу:



scriptManager.RegisterStartupScript(this.GetType(), "scriptKey", "debugger; var hdnText = window.document.getElementById('" + hdnSelectedTextID.ClientID + "');", true);


hdnText — undefined
Re[6]: доступ к <input> из C#
От: starnov  
Дата: 09.03.07 09:51
Оценка:
Здравствуйте, leleophan, Вы писали:

S>>еще вопрос один возник. вы не знаете случайно, как можно на кнопку <input type="button" runat="server"> либо <asp:Button> повесить событие OnClick, чтобы сначала выполнялся серверный код (C#, выборка данных из базы и записать в hidden'ы), а только затем — клиентский onclick (либо какой-то альтернативный вызов JavaScript-функции) ? заранее благодарен


L>Тогда не вешай на кнопку никаких клиентских обработчиков. В серверном событии OnClick после заполнения контрола данными:


L>
L>ClientScriptManager scriptManager = Page.ClientScript;
L>scriptManager.RegisterStartupScript(this.GetType(), "scriptKey", "myClientFunctionName()", true);
L>



еще раз спасибо огромное! этот код мне очень помог, все заработало так, как нужно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.