Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 10 của 10
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Giật trang khi autopostback 1 control trong trang

    Mình có 1 trang web nhập liệu thông tin cá nhân, do yêu cầu nhập dữ liệu trên 1 trang dài nên trang nhập liệu của mình nó dài phải cuộn trang.
    Khi nhập dữ liệu có 1 control autopostback thì trang web bị giật lên trên đầu, vẫn focus vào control được postback.
    Bạn nào có giải pháp gì giúp mình với?

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi tinhz121
    Mình có 1 trang web nhập liệu thông tin cá nhân, do yêu cầu nhập dữ liệu trên 1 trang dài nên trang nhập liệu của mình nó dài phải cuộn trang.
    Khi nhập dữ liệu có 1 control autopostback thì trang web bị giật lên trên đầu, vẫn focus vào control được postback.
    Bạn nào có giải pháp gì giúp mình với?
    Bạn thử cách này xem :
    Đầu tiên define 1 ID tại vị trí bạn muốn sroll đến sau khi autoPostBack : VD <div id="abc">...</div>

    Tại control postback thêm sự kiện javascript để xử lý trước khi post back (onChange, onBlur.... - Vì mình không biết control của bạn là loại j nên ko cụ thể ra đó là sự kiện j được ):

    Mã:
     $("#yourControlID").onChange() {
    
        $("form").attr("action", "#abc"); // change url submit
     }
    Đến đây là nó có thể scroll được tới vị trí trước lúc postback rồi.

    Vấn đề focus thì thêm dòng code ở phía sever :
    Mã:
    protected void _postBack() {
    
       // process post back
       .....
       // focus
       yourcontrol.focus();
    }
    Mình chỉ biết cách nông dân này, bạn nào có cách nào hay hơn thì chia sẻ. Thank

  3. #3
    Thử trong page declaration: <%@ Page MaintainScrollPositionOnPostback="true" %>
    hoặc trong code behind: Page.MaintainScrollPositionOnPostBack = true;

  4. #4
    Trích dẫn Gửi bởi nguyenq
    Thử trong page declaration: <%@ Page MaintainScrollPositionOnPostback="true" %>
    hoặc trong code behind: Page.MaintainScrollPositionOnPostBack = true;
    Cảm ơn bạn. Mình đã thử cách của bạn nhưng không được.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi lehoai
    Bạn thử cách này xem :
    Đầu tiên define 1 ID tại vị trí bạn muốn sroll đến sau khi autoPostBack : VD <div id="abc">...</div>

    Tại control postback thêm sự kiện javascript để xử lý trước khi post back (onChange, onBlur.... - Vì mình không biết control của bạn là loại j nên ko cụ thể ra đó là sự kiện j được ):
    [/CODE]
    Control postback của mình là dropdownlist.
    Mình đã thử cách của bạn rồi mà không được, nó postback được nữa luôn

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình làm được rồi. Cách làm của mình như sau:
    1. Trên trang aspx mình thêm đoạn script như sau: ControlID là control cần postback
    Mã:
    $(document).ready(function () {
                $("#<%=ControlID.ClientID%>").bind('change', function () {
                    $("form").attr("action", "#abc"); // change url submit
                });
    2. Script này để focus sau khi postback: controlName là tên control cần focus
    Mã:
    function ControlFocus(controlName) {            
                $("#" + controlName).focus();
            }
    3. Dưới trang aspx.cs chỗ hàm SelectedIndexChanged thêm đoạn code sau:
    Mã:
    string scriptFocus = "<script language='javascript'>ControlFocus('" + controlName.ClientID + "')</script>";
            ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), scriptFocus, false);
    Chú ý: Control Postback của mình là dropdownlist, control khác mình chưa test

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thực ra thì, bạn kéo cái UpdatePanel vào là xong
    Chơi ajax luôn ý

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi tinhz121
    Mình làm được rồi. Cách làm của mình như sau:
    1. Trên trang aspx mình thêm đoạn script như sau: ControlID là control cần postback
    Mã:
    $(document).ready(function () {
                $("#<%=ControlID.ClientID%>").bind('change', function () {
                    $("form").attr("action", "#abc"); // change url submit
                });
    2. Script này để focus sau khi postback: controlName là tên control cần focus
    Mã:
    function ControlFocus(controlName) {            
                $("#" + controlName).focus();
            }
    3. Dưới trang aspx.cs chỗ hàm SelectedIndexChanged thêm đoạn code sau:
    Mã:
    string scriptFocus = "<script language='javascript'>ControlFocus('" + controlName.ClientID + "')</script>";
            ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), scriptFocus, false);
    Chú ý: Control Postback của mình là dropdownlist, control khác mình chưa test
    Bạn có thể cho mình source cái page này của bạn được không mình làm hoài không được

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi betonamu
    Thực ra thì, bạn kéo cái UpdatePanel vào là xong
    Chơi ajax luôn ý
    Form của mình dùng nhiều UpdatePanel lắm.
    Form ban đầu xử lý oke rồi, giờ bổ sung thêm khoảng 20 control nữa thì lại giật tung chảo rồi [IMG]images/smilies/21.gif[/IMG]

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn thêm cái này vào thì nó tải lại trang với đúng vị trí vừa thao tác

    Mã:
    <%@ Page MaintainScrollPositionOnPostback="true" %>

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •