2010-01-26 35 views
6

Tôi muốn làm mới trang asp.net của mình sau khi ai đó nhấp vào nút "Thêm". Tuy nhiên, nút "Thêm" là một phần của điều khiển người dùng bên trong một điều khiển người dùng khác và điều khiển con và kiểm soát của cha mẹ đều được bao bọc trong Bảng cập nhật: Mã bên dưới bị cắt ngắn để hiển thị, có lý do điều khiển người dùng nằm trong một điều khiển người dùng khácLàm mới trang asp.net từ điều khiển trong điều khiển khác

bên trong kiểm soát đầu tiên:

<ajax:UpdatePanel ID="Panel1" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
      <uc:Control2 ID="Custom2" runat="server" /> 
    </ContentTemplate> 
</ajax:UpdatePanel> 

Sau đó bên Control2

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
      <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton> 
    </ContentTemplate> 
</ajax:UpdatePanel> 
+0

Tương tự, tôi đã có một UserControl với nút Thêm sự kiện w/onclick trong UserControl (đã thêm bản ghi vào db của tôi). Sau khi nhấp vào nút Thêm một lần, tiếp theo bằng cách nhấp vào nút làm mới trình duyệt - trình duyệt sẽ đăng lại biểu mẫu, chấp nhận đăng lại việc kích hoạt lại sự kiện Thêm trước, dẫn đến hoạt động thêm trùng lặp quảng cáo. Response.Redirect (trang cha mẹ) đã giải quyết vấn đề. Xem câu trả lời từ @keltex. – condiosluzverde

Trả lời

5

Nếu bạn muốn tải lại toàn bộ trang (và không chỉ là nội dung của UpdatePanels), bạn có thể làm:

Page.Response.Redirect("mypagename.aspx"); 
+0

Trang được tạo động. Tôi có thể làm điều gì đó như Response.Redirect (Page.Url) hay gì đó không. – user204588

+1

Có. Điều đó có thể sẽ hoạt động. Response.Redirect (Page.Request.Url.AbsolutePath) – Keltex

1

Giả sử bạn không có quyền kiểm soát kiểm soát người dùng gốc, bạn có thể tìm điều khiển bằng cách tìm kiếm thông qua các điều khiển con của điều khiển người dùng gốc (FindControl). Sau đó, một khi bạn có tham chiếu đến nó, bạn có thể thêm một event handler:

btnAddButton.OnClick += new EventHandler(MethodThatRefreshesPage); 

Vì bạn trong bản cập nhật bảng, bạn sẽ cần phải làm điều gì đó như Response.Redirect(Request.RawUrl) để làm mới toàn bộ trang.

Tất nhiên, nếu bạn có quyền kiểm soát quyền kiểm soát của người dùng gốc, bạn tạo sự kiện "AddClicked" của riêng mình và chuyển các đăng ký xuống nút liên kết .. bạn chỉ có thể phơi bày LinkButton như một thuộc tính công khai trên điều khiển người dùng.

0

Tôi giả sử bạn muốn làm mới trang để mục mới được thêm vào được hiển thị trong trang ... đúng không? nếu có, thì bạn có thể databind điều khiển dữ liệu của bạn như là một phần của sự kiện AddButton_Click. Ví dụ: nếu bạn có lưới hiển thị các mục, thì người dùng nhấp vào nút Thêm để thêm mục mới, bạn có thể đặt mã sau vào sự kiện AddButton_Click để "làm mới" nội dung của điều khiển dữ liệu và hiển thị nội dung mới được thêm mục:

protected void AddButton_Click(object sender, EventArgs e) 
    { 
     myGrid.DataBind(); 
    } 

Hy vọng điều này sẽ hữu ích.

0

Bạn không chỉ định cấu hình của Script Manager của bạn, tuy nhiên giả sử bạn có một Giám đốc Script cấu hình như sau:

<ajax:ScriptManager runat="server" ID="myScriptManager" EnablePartialRendering="true"></ajax:ScriptManager> 

Sau đó thêm trình kích hoạt này để mẫu UpdatePanel cho Control2 để nó trông như sau:

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="AddButton" /> 
    </Triggers> 
</ajax:UpdatePanel> 

Điều này sẽ kích hoạt PostBack cho phép bạn tải lại mọi dữ liệu ràng buộc (trong Page_Load) và cũng sẽ hiển thị lại toàn bộ trang chứ không chỉ nội dung của bảng cập nhật bên trong.

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