1

旧タイトル: 動的に作成されたコントロールが値を保持しないようにする

古い情報: これを行う必要があるのは、イメージ コントロールの必須フィールド バリデーターの回避策を作成しようとしているからです。私のコードが機能する方法は、ボタンの横に画像コントロールがあり、ユーザーがボタンをクリックすると、画像をアップロードするように求められます。ユーザーが次の段階に進む前に、画像がアップロードされていることを確認する必要があります。

イメージ コントロールに必要なフィールド バリデータがないため、イメージ コントロールがポストバックで再作成されるたびにイメージ コントロールの imageURL を表示するテキスト ボックスを作成しました。ただし、テキスト ボックスは、コントロールの最初の作成からの値を常に保持します。

*注: ページ上のすべてのコントロールは動的に作成されます。

最初に行うことは、イメージ コントロールを作成し、それを HTML テーブルに追加することです。これはうまくいきます。その直後に、テーブル セルを見つけて、イメージ コントロールを持つセルにテキスト ボックスを追加します。

HtmlTableCell tc = (HtmlTableCell)customProperties.FindControl("tcControl_" + (i + 1).ToString());
RadBinaryImage rbi = (RadBinaryImage)customProperties.FindControl("CustomControl" + (i + 1).ToString());

TextBox photoValue = new TextBox();
photoValue.ID = "CustomControl" + (i + 1).ToString() + "_txt";
photoValue.Text = rbi.imageUrl;

これは、すべてのコントロールを作成するたびに発生します。すべてのコントロールについて、それらはすべて値を保持します。これは、私がこれを起こしてほしくない唯一のコントロールです。これを行う方法を知っている人はいますか?または、画像コントロールを検証する別の方法はありますか?

お時間をいただきありがとうございます。すべてのコメント/回答をお待ちしております (:

解決済み:

ここで見つけたcheckboxlist必須フィールドバリデーターの修正版を作成しました。 コードは次のとおりです。セキュリティ上の理由から、名前空間を ######## に置き換えました。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Telerik.Web.UI;

namespace #######################################
{
    public class RequiredFieldValidatorForImages :
                        System.Web.UI.WebControls.BaseValidator
    {
        private Control _ctrl;

        public RequiredFieldValidatorForImages()
        {
            base.EnableClientScript = false;
        }

        protected override bool ControlPropertiesValid()
        {
            Control ctrl = FindControl(ControlToValidate);

            if (ctrl != null)
            {
                _ctrl = (Control)ctrl;
                return (_ctrl != null);
            }
            else
                return false;  // raise exception
        }

        protected override bool EvaluateIsValid()
        {
            try
            {
                Image rbi = (Image)_ctrl;
                return rbi.ImageUrl != "~/images/noimages.jpg";
            }
            catch
            {
                RadBinaryImage rbi = (RadBinaryImage)_ctrl;
                return rbi.ImageUrl != "~/images/noimages.jpg";
            }
        }
    }
}
4

1 に答える 1

0

解決済み:

ここで見つけたcheckboxlist必須フィールドバリデーターの修正版を作成しました。 コードは次のとおりです。セキュリティ上の理由から、名前空間を ######## に置き換えました。

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using Telerik.Web.UI;

namespace #######################################
{
    public class RequiredFieldValidatorForImages :
                        System.Web.UI.WebControls.BaseValidator
    {
        private Control _ctrl;

        public RequiredFieldValidatorForImages()
        {
            base.EnableClientScript = false;
        }

        protected override bool ControlPropertiesValid()
        {
            Control ctrl = FindControl(ControlToValidate);

            if (ctrl != null)
            {
                _ctrl = (Control)ctrl;
                return (_ctrl != null);
            }
            else
                return false;  // raise exception
        }

        protected override bool EvaluateIsValid()
        {
            try
            {
                Image rbi = (Image)_ctrl;
                return rbi.ImageUrl != "~/images/noimages.jpg";
            }
            catch
            {
                RadBinaryImage rbi = (RadBinaryImage)_ctrl;
                return rbi.ImageUrl != "~/images/noimages.jpg";
            }
        }
    }
}
于 2012-06-27T14:48:54.270 に答える