2010-01-26 34 views
9

Tôi gặp vấn đề với AJAX và ASP.NET 3.5 :( Vấn đề thực sự lạ, vì tôi đang sử dụng cùng một thứ trên trang khác và nó hoạt động tốt ở đó, nhưng trên trang cụ thể này, điều này không hoạt động .Danh sách thả xuống (trong bảng điều khiển cập nhật) gây ra POSTBack đầy đủ!

Dưới đây là những gì tôi có:

<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true" RenderMode="Inline"> 
       <ContentTemplate> 
<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList> 
</ContentTemplate> 
</asp:UpdatePanel> 

Trên đường trước khi thả xuống có một DIV (html một), và sau đó vài asp:. Panels tôi không hiểu tại sao điều này đang gây ra một đẦY ĐỦ POST BACK?!

Bất kỳ ý tưởng nào? Cảm ơn

Trả lời

1

Làm cách nào để bạn ràng buộc DropDown của mình? Mã mà bạn đã cung cấp hoạt động trên mặt của tôi với các mục tĩnh. Có lẽ nó là cái gì đó trong các điều khiển khác đang gây ra vấn đề. Tôi đã nhận thấy rằng UpdatePanel của bạn có thuộc tính UpdateMode được đặt thành có điều kiện, tuy nhiên bạn chưa xác định bất kỳ trình kích hoạt nào. Bạn có thể cố gắng đặt rõ ràng rằng bảng điều khiển cập nhật sẽ thực hiện postback không đồng bộ khi trình đơn thả xuống của bạn kích hoạt sự kiệnIndexChanged đã chọn của nó. Bạn có thể sử dụng nội dung nào đó như đánh dấu sau:

<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true" 
    RenderMode="Inline"> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" 
      AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged"> 
     </asp:DropDownList> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlNewService_PortTelco" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Xin chào! Cảm ơn bạn đã trả lời. Tôi đã thử thêm trình kích hoạt AsyncPostBack, nhưng nó không giúp được gì. Nó không có trong ví dụ của tôi, như đối với những gì tôi biết nếu một OBJECT gây ra Update là INSIDE Update Panel thì bạn không cần phải chỉ định Trigger. Kích hoạt được yêu cầu cho các đối tượng bên ngoài UpdatePanel. Tôi đã thử thay đổi UpdateMode thành Luôn luôn, nhưng điều đó cũng không giúp ích gì. Tôi đã chơi với mã, và tôi nhận thấy rằng khi tôi tạo OTHER UpdatePanel chỉ sau này, và tôi đã thêm mã giống nhau bên trong nó hoạt động tốt:/Vì vậy, phải có một cái gì đó bên trong UpdatePanel này mà làm cho nó hoạt động sai. – user259119

2

Xin lỗi vì thiếu kỹ năng lập trình: | Tất cả đều làm việc mọi lúc, nhưng vì một trong những trang hành động "trông" giống như POST BACKED, khi nó không được. Xấu hổ làm sao!!!

Xin lỗi vì đã giảm bớt thời gian của bạn!

+2

bạn có thể xác định xem trang đã đăng đầy đủ hay đăng lại một phần tại đây: http://stackoverflow.com/questions/15893011/determine-if-and-which-partial-postback-occurred-in-pageload-with-javascript-i –

5

Bạn có danh sách thả xuống với AutoPostBack được đặt thành true. Đó là lý do tại sao bạn có nó đăng lại thay vì AsyncPostBack, nếu đó là những gì bạn muốn.

Tháo AutoPostBack=true từ DropDownList và thiết lập một kích hoạt Async cho UpdatePanel bạn thiết lập để DropDownList và eventname="SelectedIndexChanged"

17

tôi đã có cùng một vấn đề của nó ... altho nó không hiển thị trong các mã sao chép ở đây, kiểm tra chắc chắn rằng bạn không có bất kỳ điều khiển với ClientIDMode = tĩnh trong updatepanel .... làm cho họ kế thừa

ít nhất bất kỳ điều khiển có thể kích hoạt một postback

+1

Tôi có cùng một vấn đề giống như mô tả OP, và tôi có danh sách thả xuống của tôi với ClientIDMode = "Tĩnh" quá. Loại bỏ ClientIDMode vừa giải quyết nó! Tôi sẽ không tìm thấy nó nếu bạn không đề cập đến điều này! – Kagawa

+0

Thay đổi thành ** kế thừa ** có thể không đủ. Nếu ứng dụng mặc định hoặc cha mẹ là với ClientMode ** tĩnh **, ** kế thừa ** sẽ không giải quyết được vấn đề.Nó phải được đặt thành ** AutoID ** hoặc ** Predictable ** để garantee sẽ tạo đúng clientID –

+0

Đây cũng là vấn đề của tôi! Oh người đàn ông đó là không rõ ràng. Cảm ơn bạn! – n8wrl

1

Đặt thuộc tính AutoPostBack thành true nên đủ để gây ra một phần postback nhưng nó không phải là những gì xảy ra và một postback đầy đủ được kích hoạt thay vì bạn mô tả chính xác.

Cách giải quyết sau đây làm việc cho tôi:

  1. Drop thuộc tính AutoPostBack.
  2. Kích hoạt đăng lại bằng sự kiện bên "thay đổi" của khách hàng.

Đây là cách DropDownList gốc nên hình như:

<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" OnChange="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(this.name, '', true, '', '', false, true))" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList> 

Để biết thêm thông tin chi tiết liên quan đến việc WebForm_PostBackOptions thông số xem dưới đây:

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) 

http://msdn.microsoft.com/en-us/library/system.web.ui.postbackoptions_members(v=VS.90).aspx

4

nhớ có cùng một vấn đề ...

KIỂM TRA WEB.CONFIG của bạn

<xhtmlConformance mode="Legacy"/> 

cho dòng này .. và JUST REMOVE IT !!

Làm việc cho tôi. Cảm ơn http://andrew-murphy.co.uk/?p=152

0

Đã cùng một vấn đề khi các thuộc tính AutoPostBack DropDownList được thiết lập là true và cố định các vấn đề bằng cách thêm ID DropDownList với updatepanel kích hoạt

0

Tôi có vấn đề này. Danh sách thả xuống của tôi nằm bên trong bảng HTML và tôi đã có Bảng điều khiển cập nhật của mình được bao quanh hai hàng riêng lẻ. Tôi đã khắc phục sự cố bằng cách gói Bảng điều khiển cập nhật quanh toàn bộ bảng thay vì chỉ hai hàng.

2

Nếu bạn có một số thành phần asp với Autopostback="true"ClientIdMode="Static", bạn phải sử dụng trình kích hoạt.

Như thế này:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlPrintOffice" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlPrintOffice" runat="server" ClientIDMode="Static" AutoPostBack="true" ...blah blah 
</asp:DropDownList> 
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

Khi tôi sử dụng trình kích hoạt, nó không thể tìm thấy DropDownList ... http://stackoverflow.com/questions/30352866/how-to-prevent-full-page-postback-on-selectedindexchange-for-dropdownlist – SearchForKnowledge

0

Một thay thế để sửa chữa vấn đề này là:

Khai báo thư viện

using AjaxControlToolkit; 

Sau đó, bạn có thể làm điều gì đó về những dòng

private void InitControl() 
{   
      //FIX - DROP DOWN 
      ToolkitScriptManager scrManager = (ToolkitScriptManager)Page.Master.Controls[0].Controls[0].FindControl("manScript"); 
      scrManager.RegisterAsyncPostBackControl(ddlNewService_PortTelco); 
} 
+0

Có thể ' Tìm 'AjaxControlToolkit' – SearchForKnowledge

0

Đặt Aut Giá trị oID đến thuộc tính ClientIDMode. Nó làm việc cho tôi. Tôi đã có hành vi khác trong các trình duyệt khác nhau (ví dụ: Google chrome và Firefox).

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