Не получает пользовательский ввод из текстового поля

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 значение "бла" при каждой загрузке страницы.Поскольку 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