2013-08-16 5 views
0

В настоящее время я разрабатываю веб-сайт ASP.NET C#. На этом сайте будет GridView с некоторыми данными в нем, , и вы должны иметь возможность экспортировать эти данные (excel, whatever).вызов функции C# из ссылки HTML

Для экспорта я буду использовать код на этом 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#?

Благодарим за помощь.

EDIT

код теперь выглядит как этот

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

И С # код позади, как это:

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» может быть найдено (вы пропали без вести ? с помощью директивы или ссылка на сборку)

+0

«Есть ли способ, чтобы стрелять функция javascript, которая будет запускать C#?«Нет, не так, как вы, кажется, думаете. Вы не можете выполнять функцию C# на ПК пользователя по ссылке в веб-браузере. Функция C# должна быть частью вашего сайта ASP.NET, запускаться на сервере , и если ваша функция возвращает результат пользователю, он должен сделать это с помощью HTTP-ответа. Говоря об этом, есть два способа сделать это: (продолжение в следующем комментарии). – mbeckish

+0

1) Введите кнопку, чтобы отправить всю форму чтобы сделать HTTP-запрос, и вся ваша страница обновится, или 2) Попросите кнопку выполнить HTTP-запрос AJAX, а затем ваш 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> 

Не забудьте указать идентификатор. Вы можете создать стиль так, как хотите, используя класс CSS.Это было бы простой выход, в противном случае, если вы хотите вызвать C# функции из JavaScript, вы должны будете использовать jQuery AJAX

Это basic tutorial я написал что-то делает с помощью AJAX вызова JQuery, вы можете изменить его удовлетворить ваши потребности.

Сообщите мне, если у вас есть дополнительные сомнения.

EDIT # 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... 
    } 

EDIT # 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 linkbutton следующим образом: '' Excel '+ ' Но тогда я получаю: Сообщение об ошибке компилятора: CS1061:« ASP.default_aspx »не содержит определения для« LinkButton1_Click »и никакого метода расширения« LinkButton1_Click », принимающего первый аргумент тип 'ASP.default_aspx' может быть найден (вам не хватает директивы using или ссылки на сборку?) – soumer

+0

Эта функция 'LinkButton1_Click' присутствует в вашем коде за файлом? Это функция на стороне сервера. Вы должны создать файл .cs. @ElSyr - Также я предполагаю, что 'form1' является идентификатором формы, если так вы должны использовать'}). AppendTo ("# form1"); ' –

+0

oh. Я добавил # перед формой. И мой код выглядит следующим образом: 'общественного частичного класса по умолчанию: System.Web.UI.Page { защищен недействительным LinkButton1_Click (объект отправителя, EventArgs е) { } }' Но что-то не работает:/ – soumer

2

Я предложу вы можете вызвать функцию javascript при нажатии кнопки html и в этой функции javascript вы можете вызвать функцию на стороне сервера с помощью ASP.Net AJAX ScriptManager.

Первое, что вам нужно сделать, это добавить ASP.Net AJAX ScriptManager на страницу и установить itsEnablePageMethods свойство верно, как показано ниже:

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

Теперь вы можете вызвать метод страницы (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(); 
} 

Вы можете вызвать эту функцию javascript из своего элемента управления html.

For detail and implementation you can refer to this link.

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