2009-12-29 17 views
2

Je commence à perdre mes nerfs sur quelque chose complètement banal: je ne reçois pas l'entrée d'utilisateur à partir d'une zone de texte: SNe pas obtenir l'entrée d'utilisateur de TextBox

que je fais quelque chose comme ça (code derrière 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" 
     } 

et le 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> 

J'ai aussi essayé de le faire avec DetailsView et le lier à une liste, mais quand je lis les valeurs dans le mode d'édition i eu le même problème.

Des idées?

Répondre

5

vous définissez la zone de texte propriété Text "blah" sur tous les Page_Load. Puisque ViewState a déjà été chargé à ce stade, vous écrasez la valeur que l'utilisateur a saisie.

Si vous souhaitez uniquement définir la valeur de texte une fois, assurez-vous de la mettre dans la vérification if (!IsPostBack).

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

    } 
+0

Aaaa merci beaucoup, je n'ai jamais pensé à ce que Load peut tirer avant l'événement click, bien maintenant je vois. –

2

Votre problème est que vous modifiez la valeur dans Page_Load!

Page_Load est exécuté avant Button1_Click.

code Passer de Page_Load à cette

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

Ou protéger votre code ... comme celui-ci

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

! IsPostBack a brisé d'autres choses, OnLoadComplete m'a fait perdre mes valeurs avant d'enregistrer dans la base de données. – RandomUs1r

1

Page_Load est appelé lors de la rentrée de poste qui est en cours de réinitialisation de la valeur dans votre zone de texte. Passer à

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

     } 
0

Personnellement, je voudrais avoir une propriété dans la vue pour définir la valeur de la zone de texte à partir du présentateur. Dans OnViewInitialized() ou OnViewLoaded().