1

壁に頭をぶつけていると、Google は私の問題に対する答えを見つけようとします。

以下の IF ステートメントが実行されると、IF ステートメントと ELSE ステートメントを完全に実行しているように見えます。

  if (IsPostBack)
         {
             Boolean bFileOK = false;

             if (fulReagentImg.HasFile)
             {
                 String sFileExtension = System.IO.Path.GetExtension(fulReagentImg.FileName).ToLower();
                 String sFileExtensionLabel = sFileExtension;
                 lblFileExtension.Text = sFileExtensionLabel;
                 String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" };
                 for (int i = 0; i < allowedExtensions.Length; i++)
                 {
                     if (sFileExtension == allowedExtensions[i])
                     {
                         bFileOK = true;
                     }
                     else
                     {
                         lblException.Text = "Can only upload .gif, .png, .jpeg, .jpg";
                         lblException.CssClass = "red";
                     }

 }

bFileOK = true で停止しない理由はありますか?

4

6 に答える 6

5

あなたのループは完全に間違っています。
ユーザーの内線番号がリスト内のすべての内線番号と一致しない場合、エラーが表示されます。

Contains()メソッド、できれば aを呼び出す必要がありHashSet<String>ます。

于 2012-09-14T20:12:06.350 に答える
1

sFileExtension は単一の拡張子であるため、許可されている 4 つの拡張子すべてではありません。これは、sFileExtension が許可された拡張子の 1 つであっても、他の 3 つの拡張子ではないことを意味します。そのため、何があっても、else ステートメントがヒットします。

于 2012-09-14T20:13:50.983 に答える
1

bFileOK = true のときにブレークする必要があると思います。次に break ステートメントを使用します

if (IsPostBack)
    {
        Boolean bFileOK = false;

        if (fulReagentImg.HasFile)
        {
            String sFileExtension = System.IO.Path.GetExtension(fulReagentImg.FileName).ToLower();
            String sFileExtensionLabel = sFileExtension;
            lblFileExtension.Text = sFileExtensionLabel;
            String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" };
            for (int i = 0; i < allowedExtensions.Length; i++)
            {
                if (sFileExtension == allowedExtensions[i])
                {
                    bFileOK = true;
                    break;
                }
                else
                {
                    lblException.Text = "Can only upload .gif, .png, .jpeg, .jpg";
                    lblException.CssClass = "red";
                }

}
于 2012-09-14T20:15:20.213 に答える
0

bFileOkをtrueに設定した後、breakステートメントを追加する必要があります。配列内のすべての文字列をループしているので、事実上、私が配列である最後の文字列のみをテストしています。

また、よりクリーンな実装を提供するArray.Containsについても調査します。

于 2012-09-14T20:18:49.240 に答える
0

for ループ内に else を含めないでください。そうしないと、失敗メッセージを少なくとも allowedExtensions.Length-1 回投稿することになります。

else を for ループの外に移動し、次のようにします。

if(bFileOK)
{
//Do Stuff
}
于 2012-09-14T20:13:51.200 に答える
0

許可された拡張機能の最初の項目が成功し、2 番目の項目が失敗して、基準の最初と 2 番目の部分に入る可能性はありますか? おそらくあなたはこれを意味しました:

if (IsPostBack)
    {
        Boolean bFileOK = false;

        if (fulReagentImg.HasFile)
        {
            String sFileExtension = System.IO.Path.GetExtension(fulReagentImg.FileName).ToLower();
            String sFileExtensionLabel = sFileExtension;
            lblFileExtension.Text = sFileExtensionLabel;
            String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" };
            for (int i = 0; i < allowedExtensions.Length; i++)
            {
                if (sFileExtension == allowedExtensions[i])
                {
                    bFileOK = true;
                }
            }
            if (!bFileOK)
            {

                    lblException.Text = "Can only upload .gif, .png, .jpeg, .jpg";
                    lblException.CssClass = "red";

            }
     }
}
于 2012-09-14T20:14:26.597 に答える