OnClick回调认为它是一个javascript函数?

时间:2010-10-27 16:49:59

标签: c# asp.net onclick javascript

我正在尝试使用OnClick回调来调用C#函数,但是javascript会抛出一个错误,说该函数未定义(即使它在C#代码中)。

仅当我通过Controls.Add在C#call behind部分的page_load中添加控件时才会发生这种情况。

换句话说,如果我这样做(在Page_Load函数中):

        LinkButton l = new LinkButton();
        l.Text = "Test";
        l.ID = "TestID";
        l.Attributes.Add("OnClick", "LinkButton_Click");
        l.Attributes.Add("runat", "server");
        l.Page = Page;
        this.Controls.Add(l);

LinkBut​​ton_Click未根据javascript定义,但如果我这样做:

在ascx文件中,它运行正常并且通常调用C#函数。

5 个答案:

答案 0 :(得分:8)

事件处理程序应附在服务器端:

LinkButton l = new LinkButton();
l.Text = "Test";
l.ID = "TestID";
l.Click += LinkButton_Click;
l.Page = Page;
this.Controls.Add(l);

当您使用Attributes属性时,您实际上附加了一个不存在的客户端功能。

答案 1 :(得分:2)

问题在于,当您通过标记定义LinkBut​​ton时,OnClick属性将被解释为服务器端控件的一部分。

当您通过代码隐藏添加OnClick属性时,您将定义客户端属性(服务器根本不会对其进行处理)。

如果您确实想通过代码隐藏定义此事件处理程序,则需要删除以下行:

l.Attributes.Add("OnClick", "LinkButton_Click");

并将其替换为:

l.Click += LinkButton_Click;

答案 2 :(得分:1)

Attribute.Add发送到HTML,而不是aspx,所以你告诉它应该有一个名为LinkBut​​ton_Click()的javascript函数来处理点击事件。

要将事件附加到c#对象,以下是正确的语法:

LinkButton l = new LinkButton();
l.Text = "Test";
l.ID = "TestID";
l.Click += LinkButton_Click; // <-- this row attaches the event
this.Controls.Add(l);

答案 3 :(得分:1)

您添加它的方式是将属性添加到html。您需要做的是添加一个事件处理程序 l。点击+ = new EventHandler ...

答案 4 :(得分:1)

您需要将事件处理程序添加到l.Click,而不是在属性中。