1

ユーザーがその上に数字を配置することを想定しているテキストボックスがあり、ボタンを押した後、その数字は配列に渡されるはずです。

押された各番号とボタンは、この配列に順番に保存する必要があります(例:3、4、5、...)。

問題は、ボタンを押すたびにpage_load発生することです。私はこのコードを持っています:

    protected string[] CurrentArr;

    protected void Page_Load(object sender, EventArgs e)
    {

        if (CurrentArr != null)
        {
            CurrentArr = (string[])Session["CurrentArr"];      
        }
        else
            CurrentArr = new string[length];

これCurrentArrは時間とともに変化する配列です。

私もAJAXでそれを解決しようとしました:

<asp:ScriptManager runat="server" ID="sm">
    </asp:ScriptManager>

    <asp:UpdatePanel runat="server" ID="update">
        <ContentTemplate>
        <input type="text" class="response" id="how_many" name="guess" placeholder="Enter your guess..." />
        <asp:Button runat="server" class="button red" id="generate" name="generate" value="Generate!" OnClick="guess_Click" />
        <asp:Button runat="server" class="button red" id="win" name="win" value="you won"   />
        </ContentTemplate>
    </asp:UpdatePanel>

しかし、それは私の配列には影響しません(私のページはポストバックしませんが...)

誰かが解決策を持っていますか?

ありがとう!

4

2 に答える 2

1

もちろん、LoadこれはASP.Netのページライフサイクルの一部です。

リクエストの種類(ポストバックかどうか)に応じて、実行するメソッドまたは実行しないメソッドをより詳細に制御するには、Page.IsPostBackを参照してください。

上記のコードでは、これはおそらくあなたが意味したことです:

    if (Session["CurrentArr"] != null)
    {
        CurrentArr = (string[])Session["CurrentArr"];
    }
    else
    {
        CurrentArr = new string[length]; //where is length defined?
        Session["CurrentArr"] = CurrentArr;
    }
于 2012-04-21T17:18:41.893 に答える
1

UpdatePanelを使用していますが、本質的にAJAX化されています。ボタンのクリックをキャッチするトリガーセクションを追加するだけです。

<asp:UpdatePanel runat="server" ID="update">
    <ContentTemplate>
        <input type="text" class="response" id="how_many" name="guess" placeholder="Enter your guess..." />
        <asp:Button runat="server" class="button red" id="generate" name="generate" value="Generate!" OnClick="guess_Click" />
        <asp:Button runat="server" class="button red" id="win" name="win" value="you won"   />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="generate" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

あなたがおそらく遭遇している問題は、あなたの配列がポストバックを通して持続していないということです。あなたとedがセッションから得たもの、取得したもの、設定したものを試してみてください。私は古い学校のアレイを使用したくない。リストを考えてみてください、それらはより用途が広いです。また、最後に配列が特に必要な場合は、myList.ToArray();を使用してください。

private List<int> CurrentArr = new List<string>();

protected void Page_Load(object sender, EventArgs e)
{
    if(Session["CurrentArr"] != null)
    {
        //if there is something stored in the session variable then grab that as a working array
        CurrentArr = (List<string>)Session["CurrentArr"];
    }
    else
    {
        //if not, then initialize one
        CurrentArr = new List<string>();
        Session["CurrentArr"] = CurrentArr;
    }
}

protected void guess_Click(object sender, EventArgs e)
{
    //get reference to the button clicked like you said in your question
    var btnMyButton = sender as Button; 
    btnMyButton.Enabled = false; //example of using the reference, disable the button that was clicked

    //add the value of your text box to the array/list, sort, then update the session
    this.CurrentArr.Add(txtYourTextBox.Text);
    this.CurrentArr.Sort();
    Session["CurrentArr"] = this.CurrentArr;
}
于 2012-04-21T19:22:35.980 に答える