旧タイトル: 動的に作成されたコントロールが値を保持しないようにする
古い情報: これを行う必要があるのは、イメージ コントロールの必須フィールド バリデーターの回避策を作成しようとしているからです。私のコードが機能する方法は、ボタンの横に画像コントロールがあり、ユーザーがボタンをクリックすると、画像をアップロードするように求められます。ユーザーが次の段階に進む前に、画像がアップロードされていることを確認する必要があります。
イメージ コントロールに必要なフィールド バリデータがないため、イメージ コントロールがポストバックで再作成されるたびにイメージ コントロールの 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";
}
}
}
}