从HTML链接调用C#函数

时间:2013-08-16 10:47:32

标签: c# javascript html asp.net

我目前正在开发一个ASP.NET C#网站。 在这个网站上将是一个包含一些数据的GridView, 你应该能够导出这些数据(excel,无论如何)。

对于导出,我将使用此website上的代码。

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

enter image description here

弹出窗口是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'的定义,也没有扩展方法   'LinkBut​​ton1_Click'接受第一个类型的参数   可以找到'ASP.default_aspx'(你错过了一个using指令吗?   或汇编参考?)

3 个答案:

答案 0 :(得分:2)

我建议你在html按钮上调用一个javascript函数点击并在那个javascript函数中,你可以使用ASP.Net AJAX ScriptManager调用服务器端函数。

您需要做的第一件事是将ASP.Net AJAX ScriptManager添加到页面并将itsEnablePageMethods属性设置为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函数。

For detail and implementation you can refer to this link.

答案 1 :(得分:1)

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

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调用而编写的basic tutorial,您可以根据自己的需要对其进行修改。

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

编辑#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>

答案 2 :(得分:0)

//看看下面的工作示例,我只使用了按钮而不是Link,你可以使用链接也只是为它定义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"); }
 });
};