LinkBut​​ton 命令事件似乎没有触发

2023-11-24

我使用 AJAX Control Toolkit Accordion、LinkBut​​ton 和 TextBox 创建了一个简单的用户控件,如下所示:

测试控制.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="TestControl.ascx.cs" Inherits="TestControl" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<cc1:Accordion ID="Accordion1" runat="server">
    <Panes></Panes>
    <HeaderTemplate>
        <div><%# Container.DataItem %></div>
    </HeaderTemplate>
    <ContentTemplate>
        <div>
            <asp:TextBox ID="textBox" Text='<%# Container.DataItem %>' runat="server"></asp:TextBox>
            <asp:LinkButton Text="Update" CommandName="Update" CommandArgument='<%# Container.DataItem %>' OnCommand="LinkButton_Command" runat="server"></asp:LinkButton>
        </div>
    </ContentTemplate>
</cc1:Accordion>

和 TestControl.ascx.cx:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class TestControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Accordion1.DataSource = new string[] { "one", "two", "three" };
        Accordion1.DataBind();
    }

    protected void LinkButton_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "Update")
        {
            TextBox value = ((LinkButton)sender).Parent.FindControl("textBox") as TextBox;
            ((string[])Accordion1.DataSource)[Accordion1.SelectedIndex] = value.Text;
            Accordion1.DataBind();
        }
    }
}

LinkBut​​ton_Command 事件处理程序在第一次单击时根本不会触发,但在第二次单击时则不会触发。创建控件的生命周期是否存在问题,导致事件无法正确连接?

更新:我静态添加控件:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register src="TestControl.ascx" tagname="TestControl" tagprefix="uc2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>

    <form id="form1" runat="server">    
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div border="1">
        <uc2:TestControl ID="TestControl1" runat="server" />
    </div>



    </form>
</body>
</html>

这是一个解决方案。我在一个测试项目中检查了这一点,这有效:

ASCX:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="WebApplication1.TestControl" %>
<%@ Import Namespace="System.ComponentModel"%>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<cc1:Accordion ID="Accordion1" runat="server" Enabled="True">

    <Panes></Panes>
    <HeaderTemplate>
        <div><asp:Label runat="server" ID="HeaderLabel"><%# Container.DataItem %></asp:Label></div>
    </HeaderTemplate>
    <ContentTemplate>
        <div>
            <asp:TextBox ID="textBox" Text='<%# Container.DataItem %>' runat="server"></asp:TextBox>
            <asp:LinkButton ID="LinkButton1" Text="Update" CommandName="Update" CommandArgument='<%# Container.DataItem %>' 
            OnCommand="LinkButton_Command" runat="server"></asp:LinkButton>
        </div>
    </ContentTemplate>

</cc1:Accordion>

隐藏代码:

public partial class TestControl : System.Web.UI.UserControl
{
    protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Accordion1.DataSource = new string[] {"one", "two", "three"};
            Accordion1.DataBind();
        }
    }

    protected void LinkButton_Command(object sender, CommandEventArgs e)
    {
        if (e.CommandName == "Update")
        {
            TextBox value = ((LinkButton)sender).Parent.FindControl("textBox") as TextBox;
            (Accordion1.Panes[Accordion1.SelectedIndex].Controls[0].Controls[1] as Label).Text = value.Text;
        }
    }
}

手风琴数据绑定似乎存在一些问题,这些问题会扰乱您的事件处理程序的连接。每次都会以某种方式重新绑定它。

此外,您发布的代码在 LinkBut​​ton_Command 方法中调用了 DataBind(),该方法在加载视图状态后发生。这将导致更新的数据直到下一次回发才会显示,因为新的绑定不会保存在 ViewState 中。它会表现得好像总是落后一次回发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LinkBut​​ton 命令事件似乎没有触发 的相关文章

随机推荐

  • 将多边形坐标从 Double 转换为 Long 以与 Clipper 库一起使用

    我有两个多边形 它们的顶点存储为双坐标 我想找到这些多边形的相交区域 所以我正在查看快船库 C 版本 问题是 Clipper 只适用于整数数学 它使用 Long 类型 有没有一种方法可以安全地使用相同的比例因子变换我的两个多边形 将它们的坐
  • Java 的 Groovy 超集 [重复]

    这个问题在这里已经有答案了 Groovy 是 Java 的超集吗 如果不是 Groovy 和 Java 之间有哪些不兼容之处 我所说的超集是指源代码向后兼容性 即 您可以获取一个 Java 文件并将其编译为 Groovy 源文件 并且它会像
  • 如何使 相同的高度

    我试图将一个元素放在一个元素的左侧 但是我似乎无法使它们具有相同的高度并彼此对齐 跨度似乎总是定位得稍高一些 有人有什么想法吗 闪闪发光 编辑 HTML 部分
  • 未找到 Gradle DSL 方法:“multiDexEnabled()”

    我遵循了 multidex 指南https developer android com tools building multidex html 但我收到这个错误未找到 Gradle DSL 方法 multiDexEnabled 我更新了
  • Response.WriteFile -- 写出字节流

    是否可以使用 Response Write WriteFile 从动态创建的位图写入 http 响应流 而不将图像保存到硬盘驱动器 您可以使用MemoryStream并将其分配给Response OutputStream 或者简单地使用Re
  • 如何通过.properties文件使@RequestParam可配置?

    我们如何通过 properties 文件进行以下配置 RequestParam value page required false defaultValue 0 Integer page RequestParam value size re
  • F#:如何使用 SQL 数据源创建 Deedle Frame

    我试图找出当数据来自 SQL 服务器时 在 F 中创建 Deedle 框架的最佳方法是什么 我尝试过类似以下的事情 I packages Deedle 0 9 12 load Deedle fsx r System dll r System
  • C# 注册表 SetValue 抛出 UnauthorizedAccessException

    在你尝试用 快速谷歌搜索 来回答这个问题之前 我想指出的是我已经这样做了 这是情况 我有以下方法尝试修改注册表项值 我遇到的问题是 执行时 它会抛出 UnauthorizedAccessException即使我已经将密钥打开为可写 我以管理
  • spring javaconfig、xml配置和注解之间的性能差异

    我们的 Spring 配置包含大约 1200 个 bean 并且我们使用 component scan Autowired 如果我们将 ApplicationContext 导出为 Xml 并且仍然使用 Autowired 我们可以节省大约
  • 带有 Bower 支持的 Webpack

    我想加载最好的节点包 并且仅当不存在时才加载 Bower 包 我只会按照 Webpack 站点中的建议使用节点包 但我需要加载一个位于 Bower 中的库 https github com Stamplay stamplay js sdk和
  • 计算经纬度坐标的中点

    有谁知道获得一对纬度和经度点的中点的最佳方法 我使用 d3 js 在地图上绘制点 需要在两点之间绘制一条曲线 因此我需要创建一个中点来在线条中绘制曲线 请参阅下图以更好地理解我正在尝试做的事情 对长脚本表示歉意 画东西看起来很有趣 我已经划
  • 在 GitHub 上指定备用项目级 README.md

    使用 GitHub 的基于 Web 的界面 我无法弄清楚如何为项目的 README 文件指定备用路径 文件名 创建新的自述文件时 Web 界面确实提供了使用我想要的任意路径或文件名的选项 但我选择的文件不会用作项目级自述文件 我希望当用户访
  • 获得 (omniauth-facebook) 和 (omniauth-twitter) 工作

    我在用着 Ruby on Rails 4 设计3 0 3 全方位认证 1 1 4 omn iauth facebook 1 4 1 omn iauth twitter 1 0 0 我最近设置了我的omniauth facebook一切正常
  • 如何将 Proguard 混淆集成到我的 JavaFX 的 IntelliJ 工件中?

    我正在使用 IntelliJ IDEA 作为 IDE 开发 JavaFX 应用程序 到目前为止 一切都运行顺利 我已经配置了所有外部库并且正确创建了我的 JavaFX 工件 现在我想在创建工件时集成混淆 使用 Proguard Intell
  • 没有BOM的UTF-8 html显示奇怪的字符

    我有一些 HTML 其中包含一些外来字符 HTML 文档保存为无 BOM 的 UTF 8 当我在浏览器中查看页面时 外来字符似乎被奇怪的字符组合 所取代 只有当我将 HTML 文档保存为带有 BOM 的 UTF 8 时 字符才能正确显示 我
  • 追踪 Android 中的内存/窗口泄漏?

    Android开发中如何追踪内存泄漏 我正在使用 eclipse IDE 来开发该应用程序 我不知道如何纠正内存或窗口泄漏异常 任何想法 主要是窗口泄漏错误引发非法参数异常 如何纠正这两个问题 请帮忙 如果你真的想知道如何跟踪一般的内存泄漏
  • 如何使用 postgresql 在 sqlalchemy 中显式转换数组文字的类型?

    在尝试通过cast type coerce和type 来转换文字数组类型并且没有成功之后 我想我会问 from pprint import pprint from sqlalchemy import String null Integer
  • 语句和PreparedStatement的区别

    准备好的语句是语句的稍微强大的版本 并且应该始终至少与语句一样快速且易于处理 准备好的语句可以参数化 大多数关系数据库通过四个步骤处理 JDBC SQL 查询 解析传入的 SQL 查询 编译 SQL 查询 规划 优化数据采集路径 执行优化的
  • backbone.js 视图在模型获取之前渲染

    我正在尝试制作一个小型的backbone js 应用程序 但在处理事情的顺序方面遇到了困难 在我的 html 文件中 标题中有两个脚本块 在我的 app js 中 我定义了一个简单的模型 视图和路由器 function window MyM
  • LinkBut​​ton 命令事件似乎没有触发

    我使用 AJAX Control Toolkit Accordion LinkBut ton 和 TextBox 创建了一个简单的用户控件 如下所示 测试控制 ascx