我目前正在开发一个ASP.NET C#网站。 在这个网站上将是一个包含一些数据的GridView, 你应该能够导出这些数据(excel,无论如何)。
对于导出,我将使用此website上的代码。
当有人点击导出链接时,会弹出如下弹出窗口:
弹出窗口是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'不包含'LinkButton1_Click'的定义,也没有扩展方法 'LinkButton1_Click'接受第一个类型的参数 可以找到'ASP.default_aspx'(你错过了一个using指令吗? 或汇编参考?)
答案 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函数。
答案 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"); }
});
};