2

ASP テーブルを含む .aspx サイトがあります。コード ビハインド ファイルでは、テーブルに行、セルを入力し、セル内に ASP TextBox を配置しています。

最初の読み込みで、TextBoxes にデータベースから値を入力します。しかし、誰かが値を編集し、作成されたボタンでページを送信した後、プログラムで作成されたテーブルの行へのアクセスはありません。

現在、動的に作成された ASP テーブルがポストバックによってリセットされているという投稿を見てきました。

ここで質問があります。ユーザーがサイトで変更した値を取得するにはどうすればよいですか?!

SaveViewState と LoadViewState をオーバーライドしようとしましたが、SaveViewState はページが読み込まれた後にのみ呼び出され、誰かがボタンをクリックした場合には呼び出されませんか?

ユーザーがボタンをクリックした後にコードで使用できるテキストボックスのデータを保存したいと思います。

私に何ができる?

4

2 に答える 2

1

a) 動的に作成されたコントロールは、Page Init イベントで作成する必要があります。そうすれば、ViewState が復元されたときに存在します (これはページの読み込みの前に発生します)。

b) PostBack であるかどうかに関係なく、必ず Page Init で作成する必要があります。

c) コントロールは常に同じ順序で作成します。

その後、PostBack 中に自動的に値を保持します。

これをお読みください: ASP.NET ページのライフ サイクルの概要

于 2013-06-07T13:55:17.187 に答える
1

ここには 3 つのキーがあり、@Alexander によって完全に表現されています。

コード例を次に示します。

 <%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>


    <form runat="server">
        <asp:PlaceHolder ID="placeHolder1" runat="server" />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit"/>
    </form>

コードビハインド:

using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : Page
{
    private static readonly List<String> _listOfThings = new List<String> { "John", "Mary", "Joe" };
    private List<TextBox> _myDynamicTextBoxes;


    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        _myDynamicTextBoxes = new List<TextBox>();
        var i = 0;
        foreach (var item in _listOfThings)
        {
            var tbox = new TextBox {ID = "TextBox" + (i++),Text=item};
            placeHolder1.Controls.Add(tbox); //make sure you are adding to the appropriate container (which must live in a Form with runat="server")
            _myDynamicTextBoxes.Add(tbox);
        }
    }

    protected void Button1_Click(Object sender, EventArgs e)
    {
        foreach (var tbox in _myDynamicTextBoxes)
        {
            Response.Write(String.Format("You entered '{0}' in {1}<br/>", tbox.Text, tbox.ID));
        }
    }
}
于 2013-06-07T14:07:11.020 に答える