2009-09-16 72 views
7

Tôi có một trang ASP.NET (C#) với một số điều khiển bên thứ 3, một số công cụ ajaxy và một số điều khiển nút ASP.NET bình thường.C# - ASP.NET Nút bấm sự kiện không hoạt động

Sự kiện nhấp chuột vào nút không kích hoạt khi được nhấp.

Nhấp đúp vào nút trong chế độ thiết kế trong VS 2008 sẽ chuyển sang mã phía sau nhưng không tạo trình xử lý sự kiện.

Tạo trình xử lý sự kiện theo cách thủ công không hữu ích.

Toàn bộ trang là quá lớn để bao gồm ở đây, nhưng đây là chút đỉnh:

<%@ 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> 

... và khai nút của tôi trên trang:

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

... và mã sau:

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

Bất kỳ ý tưởng nào? nó có thể là ajax hay gì đó không? Có thể điều khiển lưới "obout" của bên thứ 3 không?

Cập nhật:
tôi đã sửa lỗi này một hoặc hai tháng trước, vì vậy tôi trở lại câu hỏi này để trả lời nó cho hậu thế, nhưng không thể nhớ chính xác làm thế nào tôi cố định nó! (Lời nguyền của bạn, tuổi già!) Tôi đã có một số thành công hạn chế bằng cách thay thế một số điều khiển ASP.NET AJAX với jQuery UI nhưng tôi nghĩ giải pháp thực sự là một trong các thuộc tính trong một trong các thẻ đã trỏ đến một điều khiển không còn tồn tại nữa.

Nếu bạn đang ở trong tình huống tương tự này, hãy thử điều đó và cho tôi biết những gì hoạt động trong các nhận xét và tôi sẽ đăng câu trả lời đúng.

+1

Có JS nào có thể chặn và hủy gửi biểu mẫu không? –

+0

Có một số hàm js được khai báo trên trang, nhưng không có gì chạy khi trang được tải - đó có phải là những gì tôi muốn tìm không? – MGOwen

+0

Điều này có thể do một số loại điều khiển ajax trên trang của bạn gây trở ngại cho bài đăng. Bắt đầu xóa các điều khiển cho đến khi bạn bắt đầu thực hiện các sự kiện. –

Trả lời

2

Thay đổi

CodeFile="CompanyCompliance.aspx.cs" 

để

CodeBehind="CompanyCompliance.aspx.cs" 

câu hỏi liên quan: CodeFile vs CodeBehind

+0

Cảm ơn, nhưng nó không biên dịch, tôi nhận được "Không thể tải loại 'CompanyCompliancePage'. CompanyCompliance.aspx \t 1". Điều này có thể là vì nó trong vs 2008 (asp.net 3.5) và do đó sử dụng các lớp học một phần cho mã đằng sau trang? – MGOwen

+0

Có lớp .designer.cs không? Ngoài ra, hãy đảm bảo rằng Inherits = "CompanyCompliancePage" khớp với tên lớp của bạn, bạn có thể cần phải đủ điều kiện ... Nếu vẫn thất bại, hãy đổi tên trang hiện tại của bạn, sau đó thực hiện Thêm> Mục mới> Biểu mẫu nội dung web> Đặt tên là 'CompanyCompliance 'chắc chắn rằng bạn chỉ có thể thả vào một nút và gọi trình xử lý onclick, một khi hoạt động sau đó sao chép trên nhiều như đánh dấu/mã như bạn có thể từ hiện tại. – TJB

+0

Tôi nghĩ designer.cs và CodeBehind = "" chủ yếu chỉ dành cho các phiên bản cũ hơn của .net ... đó là những gì liên kết của bạn dường như đang nói. Điều đó có đúng không? – MGOwen

2

Chỉ thị kế thừa dường như để trỏ đến một loại không tồn tại.

Xem mã phía sau tệp của trang CompanyCompliance - ("CompanyCompliance.aspx.cs").

bạn nên tìm đúng không gian tên và giống như "xxx một phần công khai" trong đó xxx là tên của lớp cần tương ứng với chỉ thị kế thừa của bạn. có thể bạn phải hoàn toàn đủ điều kiện tên như TJB đã nêu.

+0

Cảm ơn, nhưng đã kiểm tra tất cả điều này trước khi đăng câu hỏi, loại tồn tại. – MGOwen

3

Trải nghiệm cùng một vấn đề gần đây - nguyên nhân cuối cùng đã được xác định là nút đã bị vô hiệu hóa bằng phương pháp gắn trực tiếp onbeforesubmit (được thiết kế để ngăn nhiều lần gửi), và các biểu mẫu web không may xuất hiện để kiểm tra trạng thái đã bật của nút trước khi nó cho phép sự kiện codebehind để kích hoạt.

+0

thanks charlie A that reasonvalidation = false làm việc! – shradha

15

Trong khi gỡ lỗi, hãy kiểm tra thuộc tính CausesValidation của nút của bạn. Vì một số lý do, một trong các trang của tôi có nút mặc định là "Đúng". Khi tôi đặt nó thành "False", mọi thứ đã hoạt động một cách rõ ràng.

4

Tôi đã gặp sự cố này ngay bây giờ và do một điều khiển khác có AutoPostBack = "true" thực hiện gửi biểu mẫu trước khi nút có cơ hội gửi biểu mẫu để kích hoạt sự kiện nhấp.

9

Tôi biết rằng điều này cần được giải quyết ngay bây giờ, nhưng chỉ để chia sẻ - Tôi vừa gặp sự cố tương tự. Trong trường hợp của tôi, vấn đề là tôi đã có một RequiredFieldValidator trong một trang, điều đó không hiển thị vì nó là một phần của cửa sổ bật lên. Trình xác thực đó được cho là chỉ được gọi khi nhấp vào nút "Lưu" có liên quan của nó, nhưng vì tôi không có bất kỳ tập hợp ValidationGroup nào, nó sẽ ngăn trang gửi cho bất kỳ nút được nhấp nào. Thêm ValidationGroup vào nút bên phải đã giải quyết được sự cố.

0

Đối với người tìm câu trả lời trong tương lai: Nếu bạn đang gán handler nhấp chuột trong mã phía sau, hãy chắc chắn rằng nó không phải là một bên trong IsPostBack == séc giả:

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

Tôi có vấn đề này tôi đã thay đổi nút thuộc tính "UseSubmitBehavior" = false. Bây giờ nó đang làm việc.

+1

Trong tương lai, vui lòng chi tiết hơn trong câu trả lời của bạn.Nếu bạn cung cấp một giải thích về những gì bạn đã làm và tại sao bạn đã làm nó, tốt nhất là với mã và/hoặc tài liệu chính thức, nó sẽ là một trợ giúp tuyệt vời cho tất cả mọi người. – DennisW

2

Tôi gặp sự cố tương tự và thực sự phức tạp. Gần đây tôi đã di chuyển một ứng dụng dạng web VS 2005 ASP.NET 2.0 cho VS 2010 ASP.NET 4.0.

Rất khó để thiết lập và lỗi như mong đợi, nhưng vấn đề của các nút không kích hoạt sự kiện nhấp chuột đã trở nên căng thẳng.

Cuối cùng, nó đơn giản như không khai báo một hành động gửi trong biểu mẫu site.master. Tôi đã thay đổi:

<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. Đã giải quyết được sự cố. Tôi hy vọng nó sẽ tiết kiệm ngày xử lý sự cố cho ai đó. Đáng buồn thay, tôi không thể tìm thấy bất cứ điều gì về nó trên internet của bản thân mình.

Các vấn đề liên quan