2013-08-16 176 views
0

我目前正在开发ASP.NET C#网站。 在这个网站将是一个GridView,其中有一些数据, ,你应该能够导出这些数据(excel,无论)。从HTML链接调用C#函数

对于出口我将使用此代码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>' 
    }); 
}); 

我现在需要启动一些C#代码和HTML链接进行导出。但是如何?

我想是这样的:

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

但是,这并不工作,因为我是表单标签之外。 只有一个窗体标签被允许runat =“server”。

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

有没有办法启动一个JavaScript函数,它将启动C#?

感谢您的帮助。现在

编辑

的代码看起来像这样

$(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”的第一个参数的定义可以找到(是否缺少?使用指令 集引用一)

+0

按钮“有没有办法解雇启动一个JavaScript函数,它将启动C#?“不,不像你想象的那样,你不能在用户的PC上通过Web浏览器的链接执行C#函数,C#函数必须是ASP.NET站点的一部分,在服务器上运行,如果你的函数返回一个结果给用户,它必须通过HTTP响应来完成,也就是说,有两种方法可以完成这个操作:(在下一个注释中继续) – mbeckish

+0

1)让按钮提交你的整个表单创建HTTP请求,并且整个页面将刷新,或者2)让按钮执行AJAX HTTP请求,然后让JavaScript接受响应并更新页面的一小部分而不刷新其余部分。如下面的答案覆盖了这两种方法 – mbeckish

+0

但是他不需要这样做如果他弹出一个服务器端链接并弹出到

标签内,它会自动启动服务器端事件。 –

回答

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

这是一个basic tutorial我写的东西做一个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> 
+0

嗨。我添加了'})。appendTo(“form1”);'并且我将HTML链接更改为如下所示的asp链接按钮: ' Excel'+' 但是后来我得到: 编译器错误消息:CS1061:'ASP.default_aspx'没有包含'LinkBut​​ton1_Click'的定义,也没有包含接受第一个参数的扩展方法'LinkBut​​ton1_Click'可以找到类型'ASP.default_aspx'(你是否缺少using指令或程序集引用?) – soumer

+0

函数'LinkBut​​ton1_Click'出现在代码后面的文件中吗?这是一个服务器端功能。你必须在你的.cs文件中创建。 @ElSyr - 同样我假设'form1'是表单的id,如果是的话,你应该使用'})。appendTo(“#form1”);' –

+0

哦。我在表单前加了#。我的代码如下所示: '公共部分类默认:System.Web.UI.Page { 保护无效LinkBut​​ton1_Click(对象发件人,EventArgs的){ } }' 但有什么不工作:/ – soumer

2

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

你需要做的就是添加一个ASP.Net AJAX ScriptManager的页面和itsEnablePageMethods属性设置为true,如下图所示的第一件事:

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

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

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.

0

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

//后面的代码的方法声明为static

[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"); } 
}); 
};