none
Проблемы с данными в asp:TextBox RRS feed

  • Вопрос

  • Есть вот такой набор asp:TextBox : 

    <div class="span12">
     <div class="row-fluid">
      <div class="span6 text-right">Фамилия</div>
      <div class="span6">
       <asp:TextBox runat="server" ClientIDMode="Static" CssClass="input-xxlarge" ID="FirstName" onfocus="SaveValue(this)" onblur="IsTextBoxEmpty(this)" />
      </div>
     </div>
     <div class="row-fluid">
      <div class="span6 text-right">Имя</div>
      <div class="span6">
       <asp:TextBox runat="server" ClientIDMode="Static" CssClass="input-xxlarge" ID="Name" onfocus="SaveValue(this)" onblur="IsTextBoxEmpty(this)" />
      </div>
     </div>
     <div class="row-fluid">
      <div class="span6 text-right">Отчество</div>
      <div class="span6">
       <asp:TextBox runat="server" ClientIDMode="Static" CssClass="input-xxlarge" ID="LastName" onfocus="SaveValue(this)" onblur="IsTextBoxEmpty(this)" />
      </div>
     </div>
    </div>

    При загрузке страницы:

    protected void Page_Load(object sender, EventArgs e)
    {
        MembershipUser usr = Membership.GetUser();
        if (usr != null)
        {
            cmd.CommandText = "SELECT * FROM Users WHERE    UserID=N'" + usr.UserID + "'";
            DataTable tbl=new DataTable();
            tbl.Clear();
            tbl.Columns.Clear();
            tbl.Load(cmd.ExecuteReader());
            if (tbl.Rows.Count > 0)
            {
                FirstName.Text = tbl.Rows[0].ItemArray[1].ToString();
                Name.Text = tbl.Rows[0].ItemArray[2].ToString();
                LastName.Text = tbl.Rows[0].ItemArray[3].ToString();
            }
        }
    }
     

    JS, которые висят на отработку фокуса и его потерю

    var old_value = "";
    
    function SaveValue(control) {
        var KID=document.getElementById("ID");
        if (KID != null)
            if(KID.value!="")
            old_value = control.value;
    }
    
    function IsTextBoxEmpty(control) {
        if (!control.value) {
            $(control).tooltip('show');
        } else {
            var KID = document.getElementById("ID");
            if (KID != null)
                if ((old_value != control.value) && (KID.value != "")) {
                    $('#ValueChanged').val('true');
                }
        }
    }

    И есть кнопочка "далее", при нажатии на которую, если были изменены данные, пишем изменения в БД. НО! В свойстве Text у всех TextBox находятся старые значения, взятые, при загрузке страницы, из БД, а не значения введенные на форму.

    Подскажите в чем проблема.

    Элемент ID находится в MasterPage и заполняется при входе пользователя в систему

    <asp:HiddenField runat="server" ID="ID" Value="" ClientIDMode="Static" />




    • Изменено dropdownuser 15 августа 2014 г. 4:17
    • Изменен тип YatajgaEditor 19 августа 2014 г. 18:00
    14 августа 2014 г. 12:33

Ответы

  • Проблема в том, что используется подход противоречящий принципу работы Web Forms. Вам нужно при нажатии на кнопку организовать обратную отправку, и уже на сервере проверять. Если это обратная отправка, то не заполнять эти контролы данными из БД, а сохранять и потом заполнять. И это нужно сделать в обработчике события кнопки.

    Сделаем содержимое сообщества лучше, вместе!

    18 августа 2014 г. 13:59
    Модератор