【问题标题】:0x800a1391 - JavaScript runtime error: 'Edit_Button_Click' is undefined0x800a1391 - JavaScript 运行时错误:“Edit_Button_Click”未定义
【发布时间】:2014-05-29 18:47:45
【问题描述】:

在我的 C# 脚本中,我在页面加载时创建了这个按钮。

    Button b = new Button();
    b.OnClientClick = "Edit_Button_Click(sender,e);";

“Edit_Button_Click(object sender, EventArgs e)”函数如下所示...

    protected void Edit_Button_Click(object sender, EventArgs e)
{
    Button btnSomeButton = sender as Button;
    btnSomeButton.Text = "I was clicked!";
}

但是,当我单击 Web 表单上的按钮时,甚至在代码到达该函数之前,我收到一条错误消息,提示“0x800a1391 - JavaScript 运行时错误:“Edit_Button_Click”未定义”。 这让我很困惑,因为我在用 C# 编写脚本时没想到会出现任何 JavaScript 错误。我是设计网络表单的新手,如果我错了,请纠正我,但我认为我不应该看到任何与 JavaScript 相关的内容,因为页面语言是 C#。

    <script runat = "server>

    protected void Page_Load(object sender, EventArgs e)
    {
    Button b = new Button();
            b.Text = "EDIT";
            b.ID = r.ID + "edit button";
            b.OnClick += Edit_Button_Click(sender, e);
    }

    protected void Edit_Button_Click(object sender, EventArgs e)
    {
        Button btnSomeButton = sender as Button;
        btnSomeButton.Text = "I was clicked!";
    }

    </script>

【问题讨论】:

  • 澄清一下,我使用的是 .aspx 网络表单页面。

标签: c# javascript jquery asp.net button


【解决方案1】:

在 C# 中使用 OnClientClick 正在创建一个名为“Edit_Button_Click”的 javascript 函数客户端,但您正在定义该函数服务器端(在您的代码隐藏中)。

如果您使用 OnClick,它将调用服务器端方法。

【讨论】:

    【解决方案2】:

    您混淆了客户端事件和服务器端事件。而不是

    b.OnClientClick = "Edit_Button_Click(sender,e);";
    

    (为浏览器中发生的点击事件分配客户端处理程序)做一个

    b.Click += Edit_Button_Click;
    

    这将分配在服务器端回发时发生的 C# 事件处理程序。

    这是一个基本的例子:

    <script runat = "server">
    
        protected void Page_Load(object sender, EventArgs e)
        {
           Button b = new Button();
           b.Text = "EDIT";
           b.ID = b.ID + "edit button";
           b.Click += Edit_Button_Click;
           form1.Controls.Add(b);
        }
    
        protected void Edit_Button_Click(object sender, EventArgs e)
        {
           Button btnSomeButton = sender as Button;
           btnSomeButton.Text = "I was clicked!";
        }
    
    </script>
    

    【讨论】:

    • 这对我来说很有意义!当我这样写时,我收到一条错误消息,上面写着...“System.Web.UI.WebControls.Button.OnClick(System.EventArgs)”由于其保护级别而无法访问。 Page_Load 函数和 Edit_Button_Click 函数都受到保护。我应该改变它们吗?这很危险吗?
    • 受保护很好,应该可以工作。你在哪里声明你的按钮和功能?
    • 我在 Page_Load 函数中声明了按钮。该函数是第一个运行的函数。然后一旦用户单击按钮,Edit_Button_Click 函数就会运行。
    • 不要。将按钮 inside 声明为 Page_Load,但功能 Edit_Button_Click outside 与 Page_Load 处于同一级别。我用基本页面示例更新了我的答案
    • @Torchedmuffinz 嗯...不是我说的吗?你看过我的回答吗?你试过了吗?
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多