Как обновить TextBox на мастер-странице после первой обратной передачи?

Привет всем, у меня возникла небольшая проблема, и я знаю, что кто-то здесь может мне помочь, потому что я не могу понять это.

У меня есть главная страница, которая включает в себя div, содержащий текстовые поля для $ и общее время для клиента, когда они выбирают службы на странице содержимого.

Проблема, с которой я сталкиваюсь, заключается в том, что при выборе службы первая обратная передача не отображает обновленные итоги в div на главной странице. После второй обратной передачи отображаются результаты первого выбора.

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

Вот мой код для главной страницы:

namespace Teres.App
{
    public partial class App : System.Web.UI.MasterPage
    {
        Teres.Controllers.Math M;



        protected void Page_Load(object sender, EventArgs e)
        {


            TextBox1.Text = "customized for: " + HttpContext.Current.Session["UserName"].ToString();
            TextBox2.Text = "member: " + HttpContext.Current.Session["IsMember"].ToString();
            TextBox3.Text = "membership info: " + HttpContext.Current.Session["MoreInfo"].ToString();

            //need to create dynamic textboxes for service events
            //will call method from Tab class
            if (IsPostBack)
            {
                TabMath();
            }


        }

        public void UpdateBar (string service)
        {
            //TextBox TextBox = new TextBox();


        }

        public void TabMath ()
        {
            M = new Teres.Controllers.Math();
            string dollarTotal = Convert.ToString(M.GetDollarTotal());
            TextBox29.Text = "total: $" + dollarTotal;

            string minuteTotal = Convert.ToString(M.GetMinuteTotal());
            TextBox30.Text = "time: " + minuteTotal + " minutes";
        }


    }
}

и вот мой код для страницы контента

namespace Teres.App
{
    public partial class Services : System.Web.UI.Page
    {
        Teres.Controllers.Services S;
        Teres.Controllers.Math M;

        protected void Page_PreInit(object sender, EventArgs e)
        {


        }

        protected void Page_Init(object sender, EventArgs e)
        {


        }

        protected void Page_Load(object sender, EventArgs e)
        {




        }


        protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            S = new Teres.Controllers.Services();
            M = new Teres.Controllers.Math();

            if(CheckBox1.Checked)
            {
                TextBox1.Text = S.GetHandDescription("manicure");
                TextBox2.Text = Convert.ToString(S.GetHandTimes("manicure"));
                TextBox3.Text = Convert.ToString(S.GetHandPrices("manicure"));

                M.UpdateMinuteTotal(S.GetHandTimes("manicure"));
                M.UpdateDollarTotal(S.GetHandPrices("manicure"));

                //Teres.App.App.UpdateBar("manicure");
            }

            else
            {
                TextBox1.Text = "";
                TextBox2.Text = "";
                TextBox3.Text = "";

                M.SubtractMinuteTotal(S.GetHandTimes("manicure"));
                M.SubtractDollarTotal(S.GetHandPrices("manicure"));

                //Teres.App.App.UpdateBar("manicure");
            }
        }

Как я могу обновить textbox29 и textbox30 сразу после выбора, чтобы обратная передача сразу отображалась на главной странице?

Спасибо!


person user3645143    schedule 23.07.2014    source источник


Ответы (1)


Итак, я понял это только сейчас и подумал, что опубликую для таких же новичков, как я, которые хотят решить эту проблему.

Я узнал, что этап пререндеринга позволяет обновлять элементы управления на странице непосредственно перед ее рендерингом, но этот этап выполняется после обработки постбэка.

 protected void Page_PreRender(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                TabMath();
            }
        }

Это позволило итогу показывать правильную версию после каждой обратной передачи.

Надеюсь, это поможет кому-то еще.

person user3645143    schedule 23.07.2014