Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Изменять текст в TextBox2 по TextBox1_TextChanged / 11 сообщений из 11, страница 1 из 1
11.04.2014, 19:02
    #38612798
Rockie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Привет!

ASP.NET. Есть пара текстбоксов, мне нужно на TextBox1_TextChanged изменять текст во втором. Какие для этого есть пути?

Сейчас я выставляю текстбоксам свойство AutoPostBack="true"
но событие отрабатывает лишь при уходе фокуса с тексбокса. А мне нужно чтобы текст во втором обновлялся сразу же.

Что пробовал:
1 а) бросить оба на Ajax контрол Update Panel со ScriptManager-ом . При этом AutoPostBack выставить в true
Код: c#
1.
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true"></asp:TextBox>


Страница перестаёт перегружаться, обновляется лишь панель, но та же фигня - значение меняется лишь при смене фокуса с первого текстбокса.
1 b) то же самое но заюзать onchange javascript-а:
Код: c#
1.
TextBox1.Attributes.Add("onchange", "MyFunction();");


javascript на изменение работает, но лишь после ухода фокуса из текстбокса

2) Пробую способ отсюда:
http://forums.asp.net/post/5517142.aspx ( полная ветка )
как понимаю если я буду вызывать WebMethod, он не сможет достучаться до TextBox-ов на странице. тоже не походит


Не хотелось бы переносить всю логику в javascript, хочется всё что надо посчитать на сервере, а в textbox лишь показать.
...
Рейтинг: 0 / 0
11.04.2014, 20:29
    #38612841
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Rockie,
Изменять на клиенте не додумывались?
Код: javascript
1.
2.
<input id="tt1" type="text" onkeyup="$('#tt2').val($(this).val())"/><br/>
<input id="tt2" type="text" />
...
Рейтинг: 0 / 0
11.04.2014, 21:03
    #38612866
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Rockie,
эпизод с вебметодом
Код: javascript
1.
2.
<input id="tt1" type="text" onkeyup=" $.get('Home/GetText', { data: $(this).val() }).done(function (data) { $('#tt2').val(data); });"/><br/>
<input id="tt2" type="text" />


Код: c#
1.
2.
3.
4.
5.
       [WebMethod]
        public string GetText(string data)
        {
            return data;
        }
...
Рейтинг: 0 / 0
11.04.2014, 23:27
    #38612939
Rockie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Где-то в степи,

спасибо за ответ! Спасибо, ваши варианты попробую. Дело в том что в этих текстобоксах должны быть результаты пересчётов, например как курсов валют. То есть само пересчитывание делается на сервере, там и специальные классы.. а в текстбоксы при изменениях хотел бы вывести лишь результаты.

За вариант с веб-методом спасибо, для меня сейчас это типо "хак" :) Как понимаю если текстбоксов будет несколько, чтобы обновить значения в остальных тексбоксах нужно будет добавить на сервере по отдельной функции для каждого, и для каждого из каждого вызывать
Код: javascript
1.
$('#ttn').val(data);

как-то так чтоли oO
...
Рейтинг: 0 / 0
12.04.2014, 00:22
    #38612967
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Rockie,
автор для меня сейчас это типо "хак" :) это не лайфхак и жись что не наесть ))
авторКак понимаю если текстбоксов будет несколько, чтобы обновить значения в остальных тексбоксах нужно будет добавить на сервере по отдельной функции для каждого, и для каждого из каждого вызывать если есть желание то можете перетащить дохлую лошадь на другую улицу..
Вообще то при работе с веб методами можно туда = сюда запиздяривать объекты а не строки ..
...
Рейтинг: 0 / 0
12.04.2014, 00:48
    #38612974
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Rockie,
эпизод с обЪектами
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 function dataApp(text) {
        
        $.ajax({
            type: "POST",
            url: "Home/GetText",
            data: "{ data:'"+text+"' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                $('#tt2').val(response.data1);
                $('#tt3').val(response.data2);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.responseText);
            }
        });
    }
//////////
<input id="tt1" type="text" onkeyup="dataApp( $(this).val());"/><br/>
<input id="tt2" type="text" /><br/>
<input id="tt3" type="text" />
////////////


Код: c#
1.
2.
3.
4.
5.
 [WebMethod]
        public string GetText(string data)
        {
            return new JavaScriptSerializer().Serialize(new { data1 = data, data2 = "ddddddd" + data }); ;
        }
...
Рейтинг: 0 / 0
12.04.2014, 01:12
    #38612978
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
вообще то лучше заменить
data: "{ data:'"+text+"' }",
на
data: JSON.stringify({ 'data': text }), - вдруг не экранированное говно пользователь вставит
...
Рейтинг: 0 / 0
15.04.2014, 13:17
    #38615229
Rockie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Где-то в степи, спасибо за ответ!

Нашёл похожий вариант с передачей значения
http://tuvianblog.com/2011/06/10/how-to-call-serverside-function-from-client-side-javascript-in-asp-net/
но там прийдётся разбирать строку на клиенте, а ваш вариант с json правильнее, тогда я смогу передать с сервера все значения сразу "пачкой". но к сожалению всё еще не могу заставить этот пример работать(передачу значения поменял, тк у меня срабатывает только в случае document.getElementById('tt2').value вместо $(this).val())

Default.aspx.cs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        [WebMethod]
        public string GetText(string data)
        {
            // todo: here make all calculations 
            // ..
            
            // здесь не происходит вызова серверной функции

            Response.Write("GetText called on server side");
            return new JavaScriptSerializer().Serialize(new { data1 = data, data2 = "ddddddd" + data });
        }



Default.aspx:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<script type="text/javascript">
    function dataApp(text) {

        alert("dataApp starts");

        $.ajax({
            type: "POST",
            url: "Default/GetText",
            data: "{ data:'"+text+"' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                document.getElementById('tt2').value = response.data1;
                document.getElementById('tt3').value = response.data2;
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.responseText);
            }
        });
    }
</script>


    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
        </asp:ScriptManager>

        <input id="tt1" type="text" onkeyup="dataApp(document.getElementById('tt1').value);"/><br/>
        <input id="tt2" type="text" /><br/>
        <input id="tt3" type="text" />
    </div>
    </form>
</body>
</html>
...
Рейтинг: 0 / 0
15.04.2014, 14:08
    #38615327
Rockie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
также делал функцию static и пробовал поместить на саму aspx страницу, чёто всё равно не заводится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplicationTextBoxTestSQL._Default" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%@ Import Namespace="System.Web.Services" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<script runat="server">
    [WebMethod]
    public static string GetText(string data)
    {
        // todo: here make all calculations 
        // ..
        //Response.Write("GetText called on server side");
        return new JavaScriptSerializer().Serialize(new { data1 = data, data2 = "ddddddd" + data });
    }
</script>

<script type="text/javascript">
    function dataApp(text) {

        alert("dataApp starts with param: " + text);

        $.ajax({
            type: "POST",
            url: "Default.aspx/GetText",
            data: "{ data:'"+text+"' }",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            failure: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.responseText);
            }
        });
    }

    function OnSuccess(response) {
        alert(response.data1);
        //                document.getElementById('tt2').value = response.data1; 
        //                document.getElementById('tt3').value = response.data2;
    }
</script>


    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
        </asp:ScriptManager>
        <div>
                <input id="tt1" type="text" onkeyup="dataApp(this.value);"/>
                

                <input id="tt2" type="text" />
                

                <input id="tt3" type="text" />
        </div>
    </form>
</body>
</html>
...
Рейтинг: 0 / 0
15.04.2014, 14:24
    #38615354
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Rockie,
Может ну его нах.., сделать кнопку - Пересчитать и не выебываться перед заказчиком.? самое простое...
Да и сами веб формс, я ничего не имею против этой технологии, но у начинающих башку рвет напрочь
от полета мысли и ощущения вседозволенности и окрыленности, это как вчера случай в спортзале.
пришел дрыщь ( против них ничего не имею), наложил блинов на штангу для жима 120 кг.
Ходил, настраивался, медитировал минут десять, нашатырь занюхнул пару раз, а в итоге даже поднять для съема не мог
( поднял бы - п....ц ему), ну это как Олег Блохин уебет по воротам мимо, а потом буцу кинется завязывать )))
я же вам дал тынц неужели трудно сделать по нему?
один в один, единственный нюанс там не заходит в петлю библиотеки для парсинга строки в обьект, придется в ручную
как то так
Код: javascript
1.
2.
3.
4.
5.
  success: function (response) {
                var obj = JSON.parse(response.d);
                $('#tt2').val(obj.data1);
                $('#tt3').val(obj.data2);
            }


ну и сама суть <script src="jquery-1.4.1.min.js" type="text/javascript"></script> или как там у вас...
без нее это все мертвечина
...
Рейтинг: 0 / 0
15.04.2014, 14:56
    #38615407
Rockie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменять текст в TextBox2 по TextBox1_TextChanged
Где-то в степи ,

ахххахах :) Спасибо большое!! :)
авторsuccess: function (response) {
var obj = JSON.parse(response.d);
$('#tt2').val(obj.data1);
$('#tt3').val(obj.data2);
}
авторну и сама суть <script src="jquery-1.4.1.min.js" type="text/javascript"></script> или как там у вас...
точно!) добавил в head jQuery, теперь работает!)

авторМожет ну его нах.., сделать кнопку - Пересчитать и не выебываться перед заказчиком.? самое простое...
Да и сами веб формс, я ничего не имею против этой технологии, но у начинающих башку рвет напрочь
от полета мысли и ощущения вседозволенности и окрыленности, это как вчера случай в спортзале.
пришел дрыщь ( против них ничего не имею), наложил блинов на штангу для жима 120 кг.
Ходил, настраивался, медитировал минут десять, нашатырь занюхнул пару раз, а в итоге даже поднять для съема не мог
( поднял бы - п....ц ему), ну это как Олег Блохин уебет по воротам мимо, а потом буцу кинется завязывать )))
мда) пожалуй наверное и это всё верно :-)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Изменять текст в TextBox2 по TextBox1_TextChanged / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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