C # - событие нажатия кнопки ASP.NET не работает - PullRequest
7 голосов
/ 16 сентября 2009

У меня есть страница ASP.NET (C #) с некоторыми сторонними элементами управления, некоторыми элементами ajaxy и некоторыми обычными элементами управления ASP.NET Button.

События нажатия кнопки не запускаются при нажатии.

Двойной щелчок по кнопке в режиме разработки в VS 2008 переключает код, но не создает обработчик событий.

Создание обработчика событий вручную не помогает.

Вся страница слишком велика, чтобы включать ее здесь, но это верхний бит:

<%@ Page Language="C#" MasterPageFile="~/basewidepage2.master" AutoEventWireup="true" EnableEventValidation="false" CodeFile="CompanyCompliance.aspx.cs" Inherits="CompanyCompliancePage" Title="3DSS" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Assembly="obout_Grid_NET" Namespace="Obout.Grid" TagPrefix="cc2" %>
<%@ Register Src="usercontrols/CalendarEx.ascx" TagName="CalendarEx" TagPrefix="uc2" %>
<%@ MasterType VirtualPath="~/basewidepage2.master" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceholder1" runat="Server">

    <script type="text/javascript">
         // a bunch of function declarations
    </script>

... и мое объявление кнопки на странице:

<asp:Button ID="LicenseCsvButton" runat="server" Text="Export to CSV" OnClick="LicenseCsvButton_Click" />

... и код:

protected void LicenseCsvButton_Click(object sender, EventArgs e)
{
    // get data
    CompanyCompliance cc = new CompanyCompliance(Master.theCompany.ID);
    DataTable dt = cc.BusinessLicenses.Tables[0];

    // send to browser as download
    Tools.SendTableAsCsvToBrowser(Response, dt, "LicenseData");
}

Есть идеи?это может быть Аякс или что-то?Может быть, сторонний "obout" элемент управления сеткой?

Обновление:
Я исправил это месяц или два назад, поэтому я вернулся к этому вопросу, чтобы ответить на него для потомков, ноне мог вспомнить, как именно я это исправил!(Проклинаю тебя, старость!) У меня был некоторый ограниченный успех, заменив некоторые элементы управления ASP.NET AJAX на jQuery UI, но я думаю, что реальное решение состояло в том, что одно из свойств одного из тегов указывало на элемент управленияэтого больше не было.

Если вы находитесь в такой же ситуации, попробуйте это и дайте мне знать, что работает в комментариях, и я выложу правильный ответ.

Ответы [ 9 ]

15 голосов
/ 20 сентября 2011

Во время отладки проверьте свойство CausesValidation вашей кнопки. По какой-то причине на одной из моих страниц была кнопка по умолчанию "True". Когда я явно установил значение «Ложь», все заработало.

9 голосов
/ 25 июля 2012

Я знаю, что это должно быть решено к настоящему времени, но просто чтобы поделиться - у меня просто была похожая проблема. В моем случае проблема заключалась в том, что у меня было RequiredFieldValidator на странице, которое не было видно, потому что это было частью всплывающего окна. Предполагалось, что этот валидатор будет вызываться только при нажатии на соответствующую кнопку «Сохранить», но, поскольку у меня не установлен ни один ValidationGroup, он не позволит странице отправить какую-либо нажатую кнопку. Добавление ValidationGroup к правой кнопке решило проблему.

3 голосов
/ 01 июня 2012

У меня была эта проблема только сейчас, и она была вызвана другим элементом управления, имеющим AutoPostBack = "true", который отправлял форму раньше, чем кнопка имела возможность отправить форму для запуска события click.

3 голосов
/ 04 мая 2011

В последнее время возникла та же проблема - в конечном итоге было установлено, что кнопка была отключена методом juavascript onbeforesubmit (предназначенным для предотвращения многократных отправок), и, к сожалению, веб-формы, по-видимому, проверяют состояние включенной кнопки, прежде чем она позволяет Событие codebehind для запуска.

2 голосов
/ 25 июня 2015

У меня была похожая проблема, и это было действительно сложно. Недавно я перенес приложение VS 2005 ASP.NET 2.0 для веб-форм в VS 2010 ASP.NET 4.0.

Сложно было установить и глючить, как и ожидалось, но проблема с кнопками, не запускающими событие click, действовала мне на нервы.

В конце концов, это было так просто, как не объявлять действие отправки в форме site.master. Я изменил:

<FORM runat="server" name="MainForm" method="post" action="Default.aspx" id="m_mainForm" enctype="multipart/form-data">

до

<FORM runat="server" name="MainForm" method="post" id="m_mainForm" enctype="multipart/form-data">

Boom. Задача решена. Я надеюсь, что это спасает дни устранения неполадок для кого-то. К сожалению, я не мог найти что-либо об этом в Интернете самостоятельно.

2 голосов
/ 16 сентября 2009

Кажется, что директива наследования указывает на несуществующий тип.

Посмотрите в коде файла на странице CompanyCompliance - ("CompanyCompliance.aspx.cs").

вы должны найти правильное пространство имен и что-то вроде "public Public Class xxx", где xxx - это имя класса, которое должно соответствовать вашей директиве наследования. возможно, вы должны полностью квалифицировать это имя, как уже говорилось в TJB.

2 голосов
/ 16 сентября 2009

Изменение

CodeFile="CompanyCompliance.aspx.cs" 

до

CodeBehind="CompanyCompliance.aspx.cs"

Смежный вопрос: CodeFile vs CodeBehind

1 голос
/ 20 февраля 2015

У меня была эта проблема. Я изменил свойство Button "UseSubmitBehavior" = false. Сейчас это работает.

0 голосов
/ 04 сентября 2014

Для будущих ищущих ответов: если вы назначаете обработчик кликов в коде, убедитесь, что он не находится внутри IsPostBack == ложная проверка:

void Page_Load (object oSender, EventArgs oEventArgs)
{
   if (IsPostBack == false)
   {
       oButton += new EventHandler(oButton_Click); // does not work
   }
   oButton += new EventHandler(oButton_Click); // does work
}
...