从HTML链接调用C#函数

从HTML链接调用C#函数,c#,javascript,html,asp.net,C#,Javascript,Html,Asp.net,我目前正在开发一个ASP.NETC#网站。 在这个网站上会有一个GridView,里面有一些数据, 您应该能够导出这些数据(excel等) 对于导出,我将使用此代码 当有人单击导出链接时,弹出窗口将如下所示: <a runat="server" OnServerClick="myFunction_Click">Excel</a> using System; using System.Collections.Generic; using System.Linq; usin

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

对于导出,我将使用此代码

当有人单击导出链接时,弹出窗口将如下所示:

<a runat="server" OnServerClick="myFunction_Click">Excel</a>
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...
    }

  }
}

弹出窗口是用HTML创建的,“按钮”是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>'
     });
});
我得到以下错误消息:

编译器错误消息:CS1061:“ASP.default\u aspx”不包含“LinkButton1\u Click”的定义,并且没有扩展方法 “LinkButton1\u Click”接受类型为的第一个参数 找不到“ASP.default\u aspx”(是否缺少using指令 或程序集引用?)


您说过整个div都被放在表单标记之外,所以要将其放在标记内部,请使用-

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

});
$(函数(){
$(“#exportlaces”).avgrund({
身高:80,
宽度:380,
holderClass:“容器”,
showClose:没错,
showCloseText:'x',
closeByEscape:没错,
onBlurContainer:“#主包装器”,
模板:“”+
'' +        
''
}).附于(“#表格1”);
//存储对链接的引用,然后首先从页面中删除按钮。
var lnkBtn=$(“#”)的值;
$(lnkBtn).remove();
//现在将其添加到“exportpopup”div
$(“#exportpopup”).append(lnkBtn);
});
现在在您的aspx页面中定义控件-

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

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

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

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
您可以从html控件调用此javascript函数


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

函数ajaxcall(e){
$.ajax({
类型:“POST”,
url:“Default.aspx/GetSquare”,
contentType:“应用程序/json;字符集=utf-8”,
数据:JSON.stringify({value:“somevalue”}),
数据类型:“json”,
成功:功能(价值){
警报(d值);
},
错误:函数(){alert(“Ajax错误”);}
});
};

Hi。我添加了
)。附录(“form1”)
我将HTML链接更改为asp linkbutton,如下所示:
'Excel'+
,但随后我收到:编译器错误消息:CS1061:'asp.default\u aspx'不包含'LinkButton1\u Click'的定义,并且找不到接受类型为'asp.default\u aspx'的第一个参数的扩展方法'LinkButton1\u Click'(您是否缺少using指令或程序集引用?)该函数
LinkButton1\u Click
是否存在于您的代码隐藏文件中?这是一个服务器端函数。您必须在.cs文件中创建。@ElSyr-我还假设
form1
是表单的id,如果是,您应该使用
)。附录(“#form1”)哦。我在表格前面加了#。我的代码如下所示:
public partial class Default:System.Web.UI.Page{protected void LinkButton1\u Click(object sender,EventArgs e){}
但有些东西不起作用:/@ElSyr检查我的更新代码。点击链接按钮时,页面是否正在刷新。我在页面中添加了linkbutton,但仍然得到了相同的编译器错误。“有没有办法启动一个javascript函数来启动C#?”没有,不是你想象的那样。您无法通过web浏览器中的链接在用户PC上执行C#函数。C#函数必须是ASP.NET站点的一部分,在服务器上运行,如果函数将结果返回给用户,则必须通过HTTP响应执行此操作。也就是说,有两种方法可以实现这一点:(在下一篇评论中继续)。1)让按钮提交整个表单以发出HTTP请求,整个页面将刷新,或者2)让按钮执行AJAX HTTP请求,然后让javascript接受响应并更新页面的一小部分,而不刷新页面的其余部分。下面的答案似乎涵盖了这两种方法,但他不需要这样做。如果他在弹出窗口中放置服务器端链接,并使弹出窗口位于标记内,它将自动触发服务器端事件。@对于您更新的问题,它将不起作用,因为在初始化页面控件时,服务器控件必须出现在上。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
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();
}
[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"); }
 });
};