Met*_*dam 0 javascript c# asp.net
我有一个用户控件与一些自定义客户端验证.当我在页面上拥有用户控件时,它没有问题.但如果该页面有回发事件(从下拉列表中选择某个选项,并显示更多字段),我的验证似乎不再起作用.我的验证如下:
protected void Page_Load(object sender, EventArgs e)
{
Type cstype = this.GetType();
if (!Page.ClientScript.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;";
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>";
Page.ClientScript.RegisterStartupScript(cstype, "ValidatorType", DateValidator);
}
Page.ClientScript.RegisterExpandoAttribute(reqDueDate.ClientID, "month", ddMonth.ClientID);
Page.ClientScript.RegisterExpandoAttribute(reqDueDate.ClientID, "day", ddDay.ClientID);
Page.ClientScript.RegisterExpandoAttribute(reqDueDate.ClientID, "year", ddYear.ClientID);
}
Run Code Online (Sandbox Code Playgroud)
我很难过.有什么建议?
编辑:
这是我正在使用的用户控件.
<asp:DropDownList ID="ddMonth" runat="server" AppendDataBoundItems="true">
<asp:ListItem Value="">--Month--</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddDay" runat="server" AppendDataBoundItems="true">
<asp:ListItem Value="">--Day--</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddYear" runat="server" AppendDataBoundItems="true">
<asp:ListItem Value="">--Year--</asp:ListItem>
</asp:DropDownList>
<asp:CustomValidator ID="reqDueDate" EnableClientScript="true" ClientValidationFunction="ValidateDate" runat="server" ErrorMessage="Required" CssClass="input-notification error png_bg" Display="Dynamic"></asp:CustomValidator>
Run Code Online (Sandbox Code Playgroud)
事实证明,我需要做两件事.在我的用户代码中放置一个更新面板,然后更改行
Page.ClientScript.RegisterExpandoAttribute(reqDueDate.ClientID, "day", ddDay.ClientID);
Run Code Online (Sandbox Code Playgroud)
至
ScriptManager.RegisterExpandoAttribute(UpdatePanelDDD, reqDueDate.ClientID, "day", ddDay.ClientID, false);
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助和http://www.aspnetajaxtutorials.com/2010/09/customvalidator-registerexpandoattribut.html的指导.