私のprevious questionにカスタムコントロールと検証についてフォローアップしましたが、サーバー側の検証は動作していますが、クライアント側の検証を追加する方法を理解できないようです。私のWebフォーム上でクライアントサイドでカスタムコントロールの検証方法は?
[ValidationProperty("Text")]
[ToolboxData("<{0}:DateSelect runat=server></{0}:DateSelect>")]
public class DateSelect : System.Web.UI.WebControls.Panel
{
private DropDownList day;
private DropDownList month;
private DropDownList year;
public DateSelect()
{
day = new DropDownList();
/* some code to create items for 'day' here */
Controls.Add(day);
month = new DropDownList();
/* some code to create items for 'month' here */
Controls.Add(month);
year = new DropDownList();
/* some code to create items for 'year' here */
Controls.Add(year);
}
public string Text
{
get
{
return year.Text + "-" + month.Text + "-" + day.Text;
}
}
}
私は、このコントロールを追加し、有効な日付に対してチェックするデータ型の操作でこのCompareValidatorを追加します。私は、コントロールを次のように持っています。バリデーターのEnableClientScript
をfalse
に設定し、カスタムコントロールがサーバー側で正しく検証され、正しい場合に正しいメッセージが提供されます。しかし、EnableClientScript
をtrue
にするとすぐに、カスタムコントロールはクライアントサイドで検証され、DropDownListsに有効な日付が実際にあるときにエラーメッセージが表示されます。私は理由を把握しようと、私は正しい値が得られて出てくるんだろう決して考える.NETによって生成された次のJavaScriptで終わってきた:
function ValidatorGetValueRecursive(control)
{
if (typeof(control.value) == "string" && (control.type != "radio" || control.checked == true)) {
return control.value;
}
var i, val;
for (i = 0; i<control.childNodes.length; i++) {
val = ValidatorGetValueRecursive(control.childNodes[i]);
if (val != "") return val;
}
return "";
}
は、だから私は、私が何かを追加する必要が信じていますバリデータが自分のコントロールを検証しようとするとすぐに呼び出され、3つのDropDownListsの選択された項目から検証する正しい値を生成するカスタムコントロール、おそらくはJavaScriptの部分。私はこのスクリプトをどこに追加するのか分かりません。すべてのポインタ?
私はあなたが言っていることを理解していますが、これによってクライアント側のバリデータが3つのDropDownListの選択項目を日付として組み合わせて検証する方法はありますか?また、私の現在の設定ではサーバ側の検証がうまく動作することに注意してください。 – Bazzz
あなたが検証しようとしている入力があれば、 'CustomValidator'を使用して、検証を実行するために必要なクライアントスクリプトを挿入します。 –
私はあなたの意見を理解していますが、他の方法で問題に近づくことを好みます。つまり、CompareValidatorがそのように動作するようにカスタムコントロールを適用します。この理由は、すべてのコントロールとバリデーターが、データベースが期待するフィールドとデータ型に基づいて動的に作成されるためです。私はあなたのソリューションは実現可能だと思うが、CompareValidatorはサーバー側で動作するので、クライアント側でも動作させることが可能でなければならないと感じている。 – Bazzz