首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UpdatePanel和RegisterStartupScript的冲突?

UpdatePanel和RegisterStartupScript的冲突?
EN

Stack Overflow用户
提问于 2012-07-04 15:54:02
回答 2查看 1.5K关注 0票数 0

我有一个带有自定义客户端验证的用户控件。当我有一个页面上的用户控件时,它没有问题。但是,如果该页面有回发事件(从下拉列表中选择某个选项,并显示更多字段),我的验证似乎不再有效。我的验证如下:

代码语言:javascript
复制
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);
}

我很困惑。有什么建议吗?

编辑:

这是我正在使用的用户控件。

代码语言:javascript
复制
<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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-05 14:19:28

结果,我需要做两件事。在我的用户代码中放置一个更新面板,并更改行

代码语言:javascript
复制
Page.ClientScript.RegisterExpandoAttribute(reqDueDate.ClientID, "day", ddDay.ClientID);

代码语言:javascript
复制
ScriptManager.RegisterExpandoAttribute(UpdatePanelDDD, reqDueDate.ClientID, "day", ddDay.ClientID, false);

感谢大家的帮助和http://www.aspnetajaxtutorials.com/2010/09/customvalidator-registerexpandoattribut.html的指导。

票数 5
EN

Stack Overflow用户

发布于 2012-07-04 18:44:17

您可以做类似的事情:

代码语言:javascript
复制
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

var btn = null;

var EndRequestHandler = function(sender, args) {
    btn = document.getElementById('<%= YourButton.ClientID %>');
    btn.onclick = ValidateDate;
};
</script>

也可以将其附加到客户端中的表单提交事件中。

编辑:当MS完成任何UpdatePanel请求(例如UpdatePanel更新DOM )时,会触发endRequest事件。你可以找到更多的细节这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11332316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档