2009-12-29 8 views
2

Я начинаю терять свои нервы на какой-то совершенно банальной вещи: я не получаю ввод данных пользователя из TextBox: Sне получает пользовательский ввод из TextBox

я сделать что-то вроде этого (кода позади ASPX):

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      this._presenter.OnViewInitialized(); 
     } 
     this._presenter.OnViewLoaded(); 
     txtBox1.Text = "blah"; 

    } 
    protected void Button1_Click(object sender, EventArgs e) 
{ 
      //Do sth with txtBox1.Text but when I read it, it is still the same as when a loaded the page at Page_Load, So if I entered "blahblah" in the txtBox1 via browser the text I get when I debug or run is still "blah" 
     } 

и ASPX

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="InsertStudent.aspx.cs" Inherits="IzPT.Vb.Views.InsertStudent" 
    Title="VnosProfesorja" MasterPageFile="~/Shared/DefaultMaster.master" %> 
<asp:Content ID="content" ContentPlaceHolderID="DefaultContent" Runat="Server"> 
     <h1>Student</h1> 
     <p> 
      <table style="width:100%;"> 
       <tr> 
        <td style="width: 139px"> 
         Name</td> 
        <td> 
         <asp:TextBox ID="txtBox1" runat="server"></asp:TextBox> 
        </td> 
       </tr> 
      </table> 
     </p> 
     <p> 
      <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Save" /> 
     </p> 
</asp:Content> 

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

Любые идеи?

ответ

5

Вы настройка текстового поля Text свойства "л" на каждом Page_Load. Поскольку ViewState уже загружен в этот момент, вы переписываете любое значение, введенное пользователем.

Если вы хотите установить значение «Текст» один раз, убедитесь, что вы положили его в поле if (!IsPostBack).

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!this.IsPostBack) 
     { 
      this._presenter.OnViewInitialized(); 
      txtBox1.Text = "blah"; 
     } 
     this._presenter.OnViewLoaded(); 

    } 
+0

Aaaa большое спасибо, я никогда не думал о том, что Page_Load может стрелять перед событием click, теперь я вижу. –

2

Ваша проблема в том, что вы меняете значение в Page_Load!

Page_Load эксплуатируется до Button1_Click.

Переместить код из Page_Load к этому

protected override void OnLoadComplete(EventArgs e) 
{ 
    txtBox1.Text = "blah"; 
} 

Или защитить код ... как этого

if (!this.IsPostBack) 
{ 
    txtBox1.Text = "blah"; 
} 
+0

! IsPostBack нарушил другие вещи, OnLoadComplete заставил меня обойти мои ценности, которые были уничтожены до сохранения в БД. – RandomUs1r

1

Страница_Load вызывается во время обратной связи, которая сбрасывает значение в текстовом поле. Изменение на

if (!this.IsPostBack) 
     { 
      txtBox1.Text = "blah"; 
      this._presenter.OnViewInitialized(); 

     } 
0

Лично у меня было бы свойство в представлении установить значение текстового поля от ведущего. В OnViewInitialized() или OnViewLoaded().