代码后面的按钮只发回,而不是调用javascript函数

时间:2013-09-04 15:22:53

标签: asp.net

我正在从后面的代码构建一个页面。我添加一个按钮并设置其属性如下:

var Button1 = new Button();
Button1.Text = "Purge Course Comments";
Button1.Attributes.Add("OnClientClick", "javascript: Purge();");
pageButtons.Controls.Add(Button1);

该按钮被添加到名为“pageButtons”的div中。当我测试程序时,按钮会正常显示在屏幕上,但是当我点击它时,除了浏览器回发之外没有任何其他事情发生。

此页面必须从后面的代码构建,因此我无法直接将该按钮添加到页面中,就像这样(可行):

<asp:Button ID="Button1" runat="server" Text="Close Window" OnClientClick="Purge;"/>

基本上,我需要能够从后面的代码中调用函数,但我没有太多运气。有人能告诉我我做错了吗?

编辑:我看过Stackoverflow上的类似问题,但在这种情况下,我找不到一个对我有用的答案。

编辑:为清楚起见,这是我在页面上定义的清除功能:

function PurgeCourse() {
        strCourseId = getQueryString("Id");
        if (strCourseId == "") {
            strCourseId = getQueryString("CourseId");
        }
        window.open("Purge.aspx?id=" + strCourseId);
        parent.window.close();
    }

如果我只是手动将按钮添加到页面,如上例所示,它可以正常工作。但是,我似乎无法从后面的代码中调用它。

编辑:我尝试了下面的建议,现在我的代码看起来像这样:

var Button1 = new Button();
Button1.Text = "Purge Course Comments";
Button1.OnClientClick = "javascript: Purge();";
pageButtons.Controls.Add(Button1);

不幸的是,这也不起作用。但是,我将重申,如果我手动将按钮添加到页面并将OnClientClick属性设置为调用Purge(),则该函数可以正常工作。我似乎无法从后面的代码中获取函数,这令人沮丧,因为我无法理解为什么。这是一个小测试页面,只有一个函数和一个div和后面的代码。我看不出问题出在哪里。

编辑:我只是尝试了另一件事,只是为了看它是否会奏效。我做了以下事情:

Button1.OnClientClick = "javascript: parent.window.close();";

这很有用,所以按钮至少可以使用内联的javascript代码。它只是没有“看到”我背后的代码在页面上的功能。

1 个答案:

答案 0 :(得分:1)

不要将OnClientClick作为属性添加到输出中。这是Button类的一个属性,在服务器端,所以只需执行

Button1.OnClientClick = "javascript: PurgeCourse();";

<asp:Button runat="server" onclientclick="javascript: PurgeCourse();" />

在客户端,它会呈现为onclick属性。

<button onclick="javascript: PurgeCourse();" />

通常停止处理事件,这也称为event.preventDefault()(微软最近不喜欢/得到这个),或return false。所以你的函数总是返回false,

Button1.OnClientClick = "javascript: PurgeCourse(); return false;";

或者您返回函数的值,以便可以决定提交是终止还是继续:

Button1.OnClientClick = "javascript: return PurgeCourse();";

<script type="text/javascript">
function PurgeCourse () {
   return false; // or return true;
}
</script>