2009-09-16 4 views
7

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

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

Двойной щелчок по кнопке в режиме разработки в 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"); 
} 

Любые идеи? это может быть аякс или что-то еще? Может быть, стороннее «акутное» управление сеткой?

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

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

+1

Есть ли какие-либо JS, которые могли бы перехватывать и отменять отправку формы? –

+0

На странице есть некоторые функции js, но ничего, что запускается при загрузке страницы, - это то, что я бы искал? – MGOwen

+0

Возможно, это связано с тем, что какой-либо элемент управления ajax на вашей странице вмешивается в сообщение. Начните удаление элементов управления, пока не начнете выполнять события. – 2010-02-22 05:45:54

ответ

2

Изменить

CodeFile="CompanyCompliance.aspx.cs" 

в

CodeBehind="CompanyCompliance.aspx.cs" 

Связанные вопрос: CodeFile vs CodeBehind

+0

Спасибо, но он не компилируется, я получаю «Не могу загрузить тип« CompanyCompliancePage ». CompanyCompliance.aspx \t 1". Может ли это быть, потому что это в vs 2008 (asp.net 3.5), и поэтому, используя частичные классы для кода за страницей? – MGOwen

+0

Есть ли класс .designer.cs? Также убедитесь, что Inherits = «CompanyCompliancePage» соответствует вашему имени класса, вам может потребоваться его полное соответствие ... Если все остальное не удается, переименуйте свою текущую страницу, а затем добавьте> Новый элемент> Форма веб-содержимого> Назовите его 'CompanyCompliance 'убедитесь, что вы можете просто нажать кнопку и вызвать обработчик onclick, как только это будет работать, тогда скопируйте столько же, сколько разметка/код, как вы можете, из существующего. – TJB

+0

Я думал, что designer.cs и CodeBehind = "" были в основном только для более старых версий .net ... вот что говорит ваша ссылка. Это неправильно? – MGOwen

2

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

Взгляните в код за файлом страницы CompanyCompliance - («CompanyCompliance.aspx.cs»).

вы должны найти правильное пространство имен и что-то вроде «public partial class xxx», где xxx - это имя класса, которое должно соответствовать директиве inherits. возможно, вам нужно полностью квалифицировать название, как уже заявлял TJB.

+0

Спасибо, но проверил все это до публикации вопроса, тип существует. – MGOwen

3

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

+0

спасибо charlie A, что causevalidation = false работал! – shradha

15

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

4

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

9

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

0

Для будущих искателей ответов: Если вы назначаете обработчик щелчка в коде позади, убедитесь, что он не внутри 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 
} 
1

Я имел эту проблему, я изменил кнопку свойство «UseSubmitBehavior» = false. Теперь он работает.

+1

В будущем, пожалуйста, будьте более подробными в своих ответах.Если вы дадите объяснение, что вы сделали и почему вы это сделали, предпочтительно с кодом и/или официальной документацией, это будет большой помощью для всех. – DennisW

2

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

Трудно было установить и ошибиться, как и ожидалось, но проблема с кнопками, которые не стреляли в событие щелчка, нервничала.

В конце концов, это было так просто, как не объявить действие submit в форме 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. Задача решена. Надеюсь, это сэкономит время на устранение неполадок. К сожалению, я ничего не мог найти об этом в Интернете.