2

私は完全に平凡なことに神経質になり始めています:TextBoxからユーザー入力を取得していません: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を使用してこれを実行し、リストにバインドしようとしましたが、編集モードで値を読み取ったときに同じ問題が発生しました。

何か案は?

4

4 に答える 4

5

すべてのPage_LoadでtextboxTextプロパティを「blah」に設定しています。この時点でViewStateはすでにロードされているため、ユーザーが入力した値はすべて上書きされます。

テキスト値を1回だけ設定する場合は、必ずif (!IsPostBack)チェック内に入れてください。

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

    }
于 2009-12-29T16:57:32.770 に答える
2

問題は、Page_Loadの値を変更していることです。

Page_Loadの前に実行されButton1_Clickます。

Page_Loadからこれにコードを移動します

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

またはあなたのコードを保護してください...このように

if (!this.IsPostBack)
{
   txtBox1.Text = "blah";
}
于 2009-12-29T16:56:45.563 に答える
1

Page_Loadは、テキストボックスの値をリセットしているポストバック中に呼び出されています。への変更

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

        }
于 2009-12-29T16:57:39.087 に答える
0

個人的には、ビューにプレゼンターからのテキストボックス値を設定するためのプロパティがあります。OnViewInitialized()またはOnViewLoaded()。

于 2009-12-29T19:28:30.063 に答える