1

我目前正在开发一个 ASP.NET C# 网站。在这个网站上会有一个 GridView,里面有一些数据,你应该能够导出这些数据(excel,不管)。

对于出口,我将使用本网站上的代码。

当有人点击导出链接时,会弹出一个弹出窗口,如下所示:

在此处输入图像描述

弹出窗口是用avgrund制作的,“按钮”是 HTML 链接。

$(function () {
        $('#exportlaces').avgrund({
            height: 80,
            width: 380,
            holderClass: 'container',
            showClose: true,
            showCloseText: 'x',
            closeByEscape: true,
            onBlurContainer: '#main-wrapper',
            template: '<div id="exportpopuptop"></div>' +
            '<div id="exportpopup">' +
            '<ul>' +
            '<li><a href="#">Excel</a></li>' +
            '<li><a href="#">HTML</a></li>' +
            '</ul>' +
            '</div>'
     });
});

我现在需要使用导出的 HTML 链接启动一些 C# 代码。但是怎么做?

我试过这样的事情:

<a runat="server" OnServerClick="myFunction_Click">Excel</a>

但这不起作用,因为我不在表单标签之外。runat="server" 只允许使用一个表单标签。

我还尝试将 ASP.NET 按钮添加到弹出窗口,但这也不起作用。

有没有办法启动一个会启动 C# 的 javascript 函数?

谢谢你的帮助。

编辑

代码现在看起来像这样

$(function () {
    $('#exportlaces').avgrund({
        height: 80,
        width: 380,
        holderClass: 'container',
        showClose: true,
        showCloseText: 'x',
        closeByEscape: true,
        onBlurContainer: '#main-wrapper',
        template: '<div id="exportpopuptop"></div>' +
        '<div id="exportpopup">' +
        '<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"> Excel</asp:LinkButton>' +
        '</div>'
    }).appendTo("#form1");
});

后面的C#代码是这样的:

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

namespace LACE
{
  public partial class Default : System.Web.UI.Page
  {

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        // Your server side code goes here...
    }

  }
}

我收到以下错误消息:

编译器错误消息:CS1061:“ASP.default_aspx”不包含“LinkBut​​ton1_Click”的定义,并且找不到接受“ASP.default_aspx”类型的第一个参数的扩展方法“LinkBut​​ton1_Click”(您是否缺少 using 指令或装配参考?)

4

3 回答 3

2

我建议您在 html 按钮单击时调用 javascript 函数,在该 javascript 函数中,您可以使用 ASP.Net AJAX ScriptManager 调用服务器端函数。

您需要做的第一件事是将 ASP.Net AJAX ScriptManager 添加到页面并将其EnablePageMethods 属性设置为 true,如下所示:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>

现在您可以从您的 javascript 函数中调用如下页面方法 (C#) 方法:

PageMethods.GetCurrentTime(document.getElementById("<%=txtUserName.ClientID%>").value,   
  OnSuccess);

其中服务器端方法如下:

[System.Web.Services.WebMethod]
public static string GetCurrentTime(string name)
{
return "Hello " + name + Environment.NewLine + "The current time is: "
    + DateTime.Now.ToString();
}

您可以从您的 html 控件调用此 javascript 函数。

有关详细信息和实现,您可以参考此链接。

于 2013-08-16T11:07:44.157 回答
1

你说整个 div 被放在表单标签之外,所以要把它放在标签里面 -

http://api.jquery.com/appendTo/

$(function () {
        $('#exportlaces').avgrund({
            height: 80,
            width: 380,
            holderClass: 'container',
            showClose: true,
            showCloseText: 'x',
            closeByEscape: true,
            onBlurContainer: '#main-wrapper',
            template: '<div id="exportpopuptop"></div>' +
            '<div id="exportpopup">' +
            '<ul>' +
            '<li><a href="#">Excel</a></li>' +
            '<li><a href="#">HTML</a></li>' +
            '</ul>' +
            '</div>'
     }).appendTo("#form1"); // any jquery selector for the form will work
});

还将您的服务器端控件更改为这样的...

<asp:LinkButton ID="" runat="server" OnClick=""></asp:LinkButton>

记得指定 ID。您可以使用 CSS 类以您想要的方式对其进行样式设置。那将是简单的出路,否则如果你想从 JavaScript 调用 C# 函数,你将不得不使用jQuery AJAX

这是我为进行 jQuery ajax 调用编写的基本教程,您可以对其进行修改以满足您的需要。

如果您还有任何疑问,请告诉我。

编辑#1 -

你添加了这个 -

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"> Excel</asp:LinkButton>

现在在代码隐藏文件中创建以下函数...

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        // Your server side code goes here...
    }

编辑#2-参考您更新的问题,它不起作用,因为在初始化页面控件时必须存在服务器控件。

我有一个想法,虽然这可能有效,

将此设置为您的 jQuery 函数 -

$(function () {
    $('#exportlaces').avgrund({
        height: 80,
        width: 380,
        holderClass: 'container',
        showClose: true,
        showCloseText: 'x',
        closeByEscape: true,
        onBlurContainer: '#main-wrapper',
        template: '<div id="exportpopuptop"></div>' +
        '<div id="exportpopup">' +        
        '</div>'
    }).appendTo("#form1");

    // Store a reference to the link and then remove the button from the page first.
    var lnkBtn = $("#<%=LinkButton1.ClientID%>");
    $(lnkBtn).remove();
    // Now add it to the 'exportpopup' div
    $("#exportpopup").append(lnkBtn);

});

现在在您的 aspx 页面中定义控件 -

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"> Excel</asp:LinkButton>
于 2013-08-16T10:51:01.587 回答
0

//看看下面的工作示例,我只是使用按钮而不是链接,您可以使用链接也只需为其定义 onclick。

// 方法后面的代码声明为静态

[WebMethod]
public static string GetSquare(String value)
{
  return value;
}

你的按钮,点击它必须完成

<input type="button" id="button" value="Chnageurl" onclick="ajaxcall()" />

为此的脚本

<script type="text/jscript">

function ajaxcall(e) {

        $.ajax({
        type: "POST",
        url: "Default.aspx/GetSquare",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify({ value: "somevalue" }),
        dataType: "json",
        success: function (value) {
        alert(value.d);
    },
   error: function () { alert("Ajax Error"); }
 });
};
于 2013-08-16T11:16:11.287 回答