カスタムのクライアント側検証を持つユーザー コントロールを作成しました。RegisterStartupScript を介して Javascript を埋め込み、RegisterExpandoAttribute を介して検証に情報を渡します。ただし、PageLoad ではユーザー コントロールが表示されず、document.getElementById を使用すると null 値が返されます。
これが私の現在のコードです:
public void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cs = Page.ClientScript;
Type cstype = this.GetType();
if (!cs.IsStartupScriptRegistered(cstype, "ValidatorType"))
{
String DateValidator;
DateValidator = "<script type=\"text/javascript\">\n";
DateValidator += "function ValidateDate(source, args) {\n";
DateValidator += " var ddDay = document.getElementById(source.day);\n";
DateValidator += " var day = ddDay.selectedIndex;\n";
DateValidator += " var ddMonth = document.getElementById(source.month);\n";
DateValidator += " var month = ddMonth.selectedIndex;\n";
DateValidator += " var ddYear = document.getElementById(source.year);\n";
DateValidator += " var year = ddYear.selectedIndex;\n";
DateValidator += " if (day == 0 || month == 0 || year == 0)\n";
DateValidator += " args.IsValid = false;\n";
DateValidator += " else\n";
DateValidator += " args.IsValid = true;\n";
DateValidator += " }\n";
DateValidator += "</script>";
cs.RegisterStartupScript(cstype, "ValidatorType", DateValidator);
}
cs.RegisterExpandoAttribute(reqDueDate.ClientID, "month", ddMonth.ClientID);
cs.RegisterExpandoAttribute(reqDueDate.ClientID, "day", ddDay.ClientID, false);
cs.RegisterExpandoAttribute(reqDueDate.ClientID, "year", ddYear.ClientID, false);
}
私が受け取るエラーは次のとおりです。
Uncaught TypeError: Cannot set property 'month' of null
Uncaught TypeError: Cannot read property 'selectedIndex' of null