【问题标题】:UpdatePanel not updating child divUpdatePanel 不更新子 div
【发布时间】:2014-11-06 00:25:18
【问题描述】:

当文本框值更改时,我正在尝试验证是否尚未使用用户名。在服务器端回调中,我添加了一个类,has-success 如果它没有被占用,或者has-error 如果它必须添加到祖先 div。这两个都包含在 UpdatePanel 中。

然而,尽管回调代码运行良好,但 div 的类永远不会在客户端更新。

标记

<asp:UpdatePanel runat="server" ChildrenAsTriggers="true">
    <ContentTemplate>
        <div id="divLoginFormGroup" runat="server" class="form-group has-feedback">
            ...
            <asp:TextBox ID="tbLogin" runat="server" class="form-control" placeholder="username" OnTextChanged="tbLogin_TextChanged" AutoPostBack="true" required />
            ...
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

服务器端

private void AddClass(HtmlGenericControl control, string className)
{
    control.Attributes["class"] += " " + className;
}

private void RemoveClasses(HtmlGenericControl control, params string[] classNames)
{
    foreach (string c in classNames)
    {
        control.Attributes["class"] = control.Attributes["class"].Replace(c, string.Empty);
    }
}

protected void tbLogin_TextChanged(object sender, EventArgs e)
{
    using (SqlDataReader reader = new LoginData().GetLoginByID(tbLogin.Text))
    {
        if (reader.HasRows)
        {
            RemoveClasses(divLoginFormGroup, "has-success");
            AddClass(divLoginFormGroup, "has-error");
        }
        else
        {
            RemoveClasses(divLoginFormGroup, "has-error");
            AddClass(divLoginFormGroup, "has-success");
        }
    }
}

// Added per @sh1rts's answer, but I still have the same problem
protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation(tbLogin.UniqueID);
    base.Render(writer);
}

我在这里错过了什么?

如果有帮助,第一个 OnTextChange 会顺利通过,但第二个总是会导致:

回发或回调参数无效。使用配置或页面中的 启用事件验证。出于安全目的,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用 ClientScriptManager.RegisterForEventValidation 方法注册回发或回调数据以进行验证。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您可以通过调用 RegisterForEventValidation 来避免此问题 - 请注意,您只能在页面的 Render 方法中执行此操作:-

    protected override void Render(HtmlTextWriter writer)
    {
        Page.ClientScript.RegisterForEventValidation(tbLogin.UniqueID);
        base.Render(writer);
    }
    

    【讨论】:

    • 我试过这个,我得到了同样的错误。它也没有帮助更新 div。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多