2013-08-16 224 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"); } 
}); 
};