عدم الحصول على إدخال المستخدم من مربع النص

StackOverflow https://stackoverflow.com/questions/1975624

  •  21-09-2019
  •  | 
  •  

سؤال

بدأت أفقد أعصابي على شيء عادي تمامًا: لا أحصل على إدخال المستخدم من مربع نص: 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 ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top