Отображение значения после отработки события

BechinOleg
Дата: 02.06.2008 10:38:09
Доброе утро! Недавно соскочил с WinForms на ASP и еще не совсем врубаюсь в принципы работы c ASP, а собственно столкнулся вот с чем:

Есть некий юзер контрол, унаследованный соответственно от UserControl  и от System.Web.UI.ICallbackEventHandler, состоящий допустим из DDL с 3-мя итемами и кнопки. В нем есть свойство Value реализованное как положено через get, set:

        private string _vl;
        public string MValue
        {
            get
            {
                return this.DDL_Values.SelectedValue;
            }
            set
            {
                VlChanged(this, new HelperValueChangedEventArgs(value));
                this.DDL_Values.SelectedValue = value;
            }
        }


делегат ValueChanged:

public delegate void HelperValueChangedEventHandler(object sender, HelperValueChangedEventArgs e);
    public class HelperValueChangedEventArgs
    {
        public HelperValueChangedEventArgs()
        {
        }
        public HelperValueChangedEventArgs(string vl)
        {
            _vl = vl;
        }

        private string _vl;
        public string value
        {
            get
            {
                return _vl;
            }
            set
            {
               _vl = value;
            }
        }
    }

public event HelperValueChangedEventHandler ValueChanged;
private void VlChanged(MyUserControl sender, HelperValueChangedEventArgs e)
        {
           
            if (ValueChanged != null)
            {
                ValueChanged(sender, e);
            }
        }


а так же RaiseCallbackEvent и GetCallbackResult:

public void RaiseCallbackEvent(string eventArgument)
{
        if (eventArgument != null)
        {
            MValue = eventArgument;
        }
}

public string GetCallbackResult()
{
        string str = "";
        return str;
}

В Page_Load описание скриптов (пример взят из MSDN):

            string cbReference = Page.ClientScript.GetCallbackEventReference(this,
                "arg", "ReceiveServerData", "context");
            string  callbackScript = "function CallServer(arg, context)" +
                "{ " + cbReference + "} ;";
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
                "CallServer", callbackScript, true);

Далее сам скрипт:

  <script type="text/javascript">
    function LookUpSelectedValue()
    {
        var ddl = document.getElementById('<%= DDL_Values.ClientID %>');
        var res = ddl .SelectedValue;
        CallServer(res , "");
    }
   
    function ReceiveServerData(rValue)
    {
        // здесь типа обработка возврата от сервера
    }
  </script>

В кнопке юзер контрола: OnClientClick="LookUpSelectedValue();"
UC как положено описан в Web.config

Далее в странице Default добавляем тот самый UC с OnValueChanged = "valueChanged" и простой TextBox, в valueChanged следующее:

    protected void valueChanged(object sender, HelperValueChangedEventArgs e)
    {
        this.TextBox1.Text = e.value;
        this.TextBox1.Focus();
    }

Закпускаем и смотрим... Значение в DDL есть, нажимаю кнопку, получаю следующий сценарий: Отрабатывает CallServer в скрипте, в RaiseCallbackEvent ловлю eventArgument, в нем сидит то, что выбрано в DDL, все четко, далее (как описано выше) отправляем  eventArgument в свойство MValue, отрабатывает VlChanged, тоже все четко, переходим на страницу Default и смотрим на valueChanged. Процедура отрабатывает, в e.value то что нужно (SelectedValue дроп дауна). Все происходит по задуманному и логичному сценарию, НО... на странице ничего не происходит!!! TexBox1 как был пустой и без фокуса так таким и остался! Народ помогите заполнить пробел в знаниях. Подскажите, что я не так сделал или пропустил. Заранее благодарен!
Aleksey Basynin
Дата: 02.06.2008 12:52:00
AutoPostBack DDL Установлен?
BechinOleg
Дата: 02.06.2008 13:04:33
Aleksey Basynin:
AutoPostBack DDL Установлен?


Кнопка делает постбак, да и в DDL тоже установлен
BechinOleg
Дата: 03.06.2008 16:50:42
Неужели никак нельзя обойти сброс значений свойств?
Zorina
Дата: 03.06.2008 17:46:54
по-моему все дело в callback,  страница не проходит свой жизненный цикл до конца и не рендерит ваши измененные значения.

вообще чего конкретно вы хотите добиться не совсем понятно:)
______________________________________
http://asp.net/learn/data-access/

Ищи там где потерял, а не там где светло.
мы с вами когда-то где-то уже встречались да, я была уже когда-то где-то.

Евгений Веприков
Дата: 03.06.2008 17:54:49
На полученной странице есть подобный JavaScript
WebForm_AutoFocus('TextBox1')?
Все должно быть просто, очень просто, настолько просто - насколько это возможно!
Zorina
Дата: 03.06.2008 18:30:32
у меня нет :)
______________________________________
http://asp.net/learn/data-access/

Ищи там где потерял, а не там где светло.
мы с вами когда-то где-то уже встречались да, я была уже когда-то где-то.

BechinOleg
Дата: 04.06.2008 11:17:59
Евгений Веприков:

На полученной странице есть подобный JavaScript
WebForm_AutoFocus('TextBox1')?

Неа, нету такого
Zorina
Дата: 04.06.2008 11:23:56
BechinOleg:

Евгений Веприков:

На полученной странице есть подобный JavaScript
WebForm_AutoFocus('TextBox1')?

Неа, нету такого

чего вы хотите добиться, расскажите?
______________________________________
http://asp.net/learn/data-access/

Ищи там где потерял, а не там где светло.
мы с вами когда-то где-то уже встречались да, я была уже когда-то где-то.

BechinOleg
Дата: 04.06.2008 11:26:47
В примере выше не сама задача, а просто попытка отработать технологию. Собственно сама задача такая: Есть юзер контрол, с какими то свойствами, по нажатию кнопки из джаваскрипта открывается модальное окно, которое что-то там возвращает, так вот нужно отловить на сервере, что это самое "что-то" изменилось. Решения кроме создания event'а я не нашел, может быть есть идеи получше?