0

これまでのところ、C# を使用した ASP.NET の学習経験を本当に楽しんでいます :)。コードの実装に関して IsPostBack 関数を理解するのに問題があります。ここで IsPostBack に関するいくつかの質問を見てきましたが、特定の実装についてより「一般化された」アドバイスを求めています。

アプリケーションは比較的単純です。ドロップダウン メニューからフォントを選択し、テキスト ボックスにテキストを入力します。ディスプレイを押すと、選択したフォント オプションに従ってテキストが表示されます。IsPostBack機能を実装しようとしているので、テキストボックスに何か他のものを入力しようとすると、以前の送信からのテキストが表示されません。FontsList() メソッドの呼び出し元を変更しようとしましたが、うまくいきません。Null Reference エラーが発生します (理由はわかっています)。

私がコンパイルした「分離コード」/C# コードは次のとおりです。

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

public partial class _Default : System.Web.UI.Page
{

    List<String> folderNames;
    List<String> filePrefixes;
    List<String> fileSuffixes;

    protected void FontsList()
    {


        folderNames = new List<String> {"cartoon", "copperDeco", "decoTwoTone", "embroidery", "fancy", "goldDeco", "green",
                                        "greenChunky", "ice", "letsFaceIt", "lights", "peppermintSnow", "polkadot", "rainbow", "seaScribe",
                                        "shadow", "snowflake", "teddy", "tiger", "Victorian", "water", "wood", "zebra"};

        filePrefixes = new List<String> {"alphabet_" + "", "copperdeco-", "", "embroidery-", "art_", "golddeco-", "", "109", "ice",
                                         "faceoff-", "", "peppermint-", "polkadot-", "", "", "shad_", "snowflake-", "alphabear", "", "vic",
                                         "wr_", "wood", "zebra-"};

        fileSuffixes = new List<String> {"s", "", "4", "", "", "", "", "", "", "", "1", "", "", "", "", "", "", "" + "smblue", "",
                                         "", "", "", ""};


    }

    protected void Page_Load(object sender, EventArgs e)
    {
        FontsList();
        if (!IsPostBack)
        {
            //FontsList();
            foreach (String s in folderNames)
            {
                DropDownList.Items.Add(s);
            }
        }

    }

    protected void submitDisplay_Click(object sender, EventArgs e)
    {
        int index = folderNames.IndexOf(DropDownList.Text); //drop down box

        foreach (Char c in textBox.Text)
        {
            if(c == ' ')
            {
                displayText.InnerHtml += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
            }
            else
            {
            displayText.InnerHtml += "<img src = 'Alphabets/" + folderNames[index] + "/" + filePrefixes[index] + c + fileSuffixes[index] + ".gif' />";
            }
        }
    }
}

残念ながら、私は ASP.NET 機能を備えたサーバーにアクセスできませんが、必要に応じてファイルなどを喜んで送信します。

いつものように、誰の助け/フィードバックも大歓迎です:)。

4

1 に答える 1

2

ASP .NET では、コントロールの状態が ViewState オブジェクトに自動的に格納されます。ページがポストバックされると、displayText コントロールには前回のクリックの値が残っており、新しい画像が追加されます。新しい値を追加する前に、以前のデータをクリアする必要があります。

protected void submitDisplay_Click(object sender, EventArgs e)
{
    displayText.InnerHtml = "";

    int index = folderNames.IndexOf(DropDownList.Text); //drop down box

    foreach (Char c in textBox.Text)
    {
        if(c == ' ')
        {
            displayText.InnerHtml += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
        }
        else
        {
            displayText.InnerHtml += "<img src = 'Alphabets/" + folderNames[index] + "/" + filePrefixes[index] + c + fileSuffixes[index] + ".gif' />";
        }
    }
}
于 2012-07-27T03:25:02.350 に答える