Выполнение методов на стороне сервера, нажав на DIV

Я работаю над проектом ASP.Net , с C# .

Обычно, когда мне нужно добавить Кнопки , которые будут выполнять некоторые методы , я буду использовать ASP-контроллер (Button) внутри runat = "server" форма.

Но я чувствую, что это действительно ограничивает возможности моего веб-сайта, потому что, когда я работал с JSP , я использовал jQuery для достижения сервлета для выполнения некоторых кодов и возврата responseText .

Я еще не проверял, как это делается в ASP.Net, но мой вопрос касается контроллеров и знаменитого runat = "server" .

When I add a runat="server" to any HTML Element, I'm supposed to be able to manipulate this HTML element in C# (Server-Side), and this actually works, I can change the ID, set the InnerText or InnerHtml, but the thing that I can't get, is why can't I execute a method by clicking on this element?

Атрибут onclick для JavaScript, я думаю, и OnServerClick , похоже, не работает. Это что-то не так с моими кодами? или это вообще не работает?

0
Возможно, вы захотите использовать ASP.NET MVC ...
добавлено автор Lucero, источник
не могли бы вы показать нам свои коды?
добавлено автор mdcuesta, источник
divs с атрибутами runat не имеет события serverclick, вам нужно обработать его с помощью ajax/jquery/javascript.
добавлено автор mdcuesta, источник
@mdcuesta это не о кодах, а о концепции, но здесь вы идете: <div id = "blabla" runat = "server" OnClick = "Test"> Hello </div>
добавлено автор user1665700, источник
@Lucero Я вынужден использовать веб-формы.
добавлено автор user1665700, источник

6 ответы

You will have to handle the click in the div using the Jquery and call server-side methods through JQuery

2
добавлено

You can execute a method from jQuery click in server, using __doPostBack JavaScript function, see this threat for more details How to use __doPostBack()

1
добавлено

если вы ссылаетесь на divs с атрибутами runat = "server", у них нет событий onserverclick, поэтому он не работает

1
добавлено

Существует несколько способов выполнения методов на стороне сервера, нажав на div или что-нибудь на вашей странице. Первый упоминается __dopostback, второй - обработка щелчка в JavaScript или с помощью jQuery и вызов функции в обработчике или метод страницы в веб-службе или метод страницы на вашей странице за кодом. Вот версия обработчика:

 $("#btn1").click(function() {
    $.ajax({
            url: '/Handler1.ashx?param1=someparam',
            success: function(msg, status, xhr) {
                //doSomething, manipulate your html
            },
            error: function() {  
             //doSomething
            }
        });
 });

Я думаю, что вторая версия лучше, потому что вы можете сделать частичную обратную передачу без какой-либо обновленной панели, асинхронно. Недостатком является то, что код на стороне сервера отделен от вашей страницы за кодом.

Обработчик:

public class Handler1: IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      context.Response.ContentType = "application/json";
      var param1= context.Request.QueryString["param1"];
      //param1 value will be "someparam"

     //do something cool like filling a datatable serialize it with newtonsoft jsonconvert

      var dt= new DataTable();
     //fill it
      context.Response.Write(JsonConvert.SerializeObject(dt));
   }
}

Если все круто, вы получаете ответ в вызове ajax в разделе успеха, а параметр «msg» будет вашим сериализованным JSON-данным.

1
добавлено
Я рад, что вам понравилось :)
добавлено автор speti43, источник
Я сделал обновление!
добавлено автор speti43, источник
Я люблю тебя @ speti43
добавлено автор user1665700, источник
@ spetie43, не могли бы вы обновить свой ответ небольшим примером того, как может выглядеть Handler? Просто знать, как использовать возвращаемые параметры (msg, status, xhr)
добавлено автор user1665700, источник
Теперь я люблю тебя больше: D
добавлено автор user1665700, источник

Сделайте div runat = "server" и id = "divName"

в событии page_Load в cs:

if (IsPostBack)
{
if (Request["__EVENTARGUMENT"] != null && Request["__EVENTARGUMENT"] == "divClick")
{
    //code to run in click event of divName
}
}

divName.Attributes.Add("ondivClick", ClientScript.GetPostBackEventReference(divName, "divClick"));

Надеюсь, поможет :)

1
добавлено

Добавьте этот код в свой jQuery на div onclick и передайте идентификатор DIv, который вызывает звонок

__doPostBack('__Page', DivID);

На загрузке страницы добавьте этот код

if (IsPostBack)
            {
    //you will get id of div which called function
    string eventargs = Request["__EVENTARGUMENT"];

                    if (!string.IsNullOrEmpty(eventargs))
                    {
                       //call your function 
                    }
}
1
добавлено
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)