عدم الحصول على إدخال المستخدم من مربع النص
سؤال
بدأت أفقد أعصابي على شيء عادي تمامًا: لا أحصل على إدخال المستخدم من مربع نص: S
أفعل شيئًا كهذا (الكود وراء 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 وربطه بقائمة ، لكن عندما قرأت القيم في وضع التحرير ، واجهت نفس المشكلة.
أيه أفكار؟
المحلول
أنت تقوم بتعيين خاصية Textbox 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();
}
نصائح أخرى
مشكلتك هي أنك تقوم بتغيير القيمة في page_load!
Page_Load
يتم تشغيله من قبل Button1_Click
.
انقل الرمز من page_load إلى هذا
protected override void OnLoadComplete(EventArgs e)
{
txtBox1.Text = "blah";
}
أو حماية الكود الخاص بك ... مثل هذا
if (!this.IsPostBack)
{
txtBox1.Text = "blah";
}
يتم استدعاء page_load أثناء الخلفية التي تعيد تعيين القيمة في مربع النص الخاص بك. التغيير إلى
if (!this.IsPostBack)
{
txtBox1.Text = "blah";
this._presenter.OnViewInitialized();
}
أنا شخصياً سيكون لدي خاصية في العرض لتعيين قيمة مربع النص من مقدم العرض. في onviewinitialized () أو onviewloaded ().