2011-09-12 15 views
6
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="Server"> 
    <meta http-equiv="refresh" content="4" /> 
<script type="text/javascript"> 

    var xPos1, yPos1; 

    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_pageLoading(pageLoadingHandler); 
    prm.add_pageLoaded(pageLoaded); 
    function pageLoaded(sender, args) { 

     $get('<%=Panel_Users.ClientID %>').scrollLeft = xPos1; 
     $get('<%=Panel_Users.ClientID %>').scrollTop = yPos1; 
    } 
    function pageLoadingHandler(sender, args) { 
     xPos1 = $get('<%=Panel_Users.ClientID %>').scrollLeft 
     yPos1 = $get('<%=Panel_Users.ClientID %>').scrollTop; 
    } 
    </script> 
</asp:Content> 

काम नहीं करता के बाद पृष्ठ स्क्रॉल स्थिति बनाए रखने के है, जहां मैं गलतकैसे asp.net में एक पेज पोस्टबैक

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />  

<div style="height: 504px; width: 941px;"> 
       <asp:Panel runat="server" ID="Panel_Users" ScrollBars="Auto" Style="z-index: 1; left: 748px; 
        top: 621px; position: absolute; height: 250px; width: 287px"> 
        <asp:UpdatePanel UpdateMode="Conditional" ID="UpdatePanel1" runat="server"> 
         <ContentTemplate> 
          <asp:GridView ID="Grid_UserTable" runat="server" Style="z-index: 1; left: 2px; top: 5px; 
           position: absolute; height: 152px; width: 243px" BorderColor="#666666" AutoGenerateColumns="False" 
           OnRowDataBound="MyGrid_RowDataBound"> 
           <Columns> 
            <asp:TemplateField HeaderText="Status"> 
             <ItemTemplate> 
              <asp:Image ID="Status" runat="server" /> 
             </ItemTemplate> 
            </asp:TemplateField> 
            <asp:BoundField DataField="TimeReceived" HeaderText="TimeReceived" InsertVisible="False" 
             ReadOnly="True" SortExpression="TimeReceived" /> 
            <asp:BoundField DataField="TimeRead" HeaderText="TimeRead" SortExpression="TimeRead" /> 
            <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
           </Columns> 
          </asp:GridView> 
         </ContentTemplate> 
        </asp:UpdatePanel> 
       </asp:Panel> 
      </div> 

जा रहा हूँ मैं कम से पेज ठहरने कोशिश कर रहा हूँ उसी स्थिति में जब पृष्ठ प्रत्येक 5 सेकंड के बाद रीफ्रेश होता है और पृष्ठ शीर्ष पर जाता है। मैंने पेज MaintainScrollPositionOnPostback = "true" की कोशिश की। यह काम नहीं किया, मैंने अजाक्स का उपयोग करने की कोशिश की लेकिन इसका कोई मतलब नहीं है कि इसका उपयोग कैसे किया जाए। क्या कोई मेरी मदद कर सकता है कि इसे अजाक्स के साथ कैसे किया जाए।

उत्तर

4

MaintainScrollPositionOnPostback केवल IE में काम करता है। ऐसा करने के लिए आप या तो अपनी खुद की क्लाइंट स्क्रिप्ट रोल कर सकते हैं या अपने पेज/फॉर्म के विभिन्न अनुभागों पर एंकर लिंक का उपयोग कर सकते हैं।

इसी प्रकार यहां सवाल:

MaintainScrollPositionOnPostback is not working - how to debug?

MaintainScrollPositionOnPostback not working with javascript:__doPostBack

maintainScrollPositionOnPostback="true" does not work globally after setting in web.config ,but works in page level,what should I do?

+0

बस MaintainScrollPositionOnPostback पृष्ठ निर्देश का परीक्षण किया गया है, और वर्तमान में यह फ़ायरफ़ॉक्स 52, एज 38 और क्रोम 57 में काम कर रहा है। – Mike

+1

अनुशंसित नहीं है: http://www.ryadel.com/en/asp-net-mantainscrollpositiononpostback-chrome-recent -ब्रोसर/ – IrishChieftain

2

क्या भयंकर यूआई (पेज हर 5 सेकंड ताज़ा करता है) की तरह लगता है के लिए एक सस्ता फिक्स '#' जोड़ने के लिए किया जाएगा और उस तत्व की आईडी जिसे आप पता बार में यूआरएल में देखना चाहते हैं लेकिन वह स्वचालित रूप से आईडी-लिंक्ड तत्व के शीर्ष पर स्क्रॉल करेगा।

इस एक वाणिज्यिक उत्पाद है और आप जल्दी मैं JQuery के ajax कार्यान्वयन बाहर की जाँच की सिफारिश और कुल मिलाकर उन पुनः लोड बंद दस्तक था में हैं।

ऐसा लगता है कि एक पंक्ति के रूप में सरल किया जा सकता है: अगर है कि आप के लिए विचित्र लग रहा है

$.ajax(
    { 
     url:"/thisPath/requestPath", 
     complete:function(data){ 
     //apply data (the http-response) to HTML 
    } 
); 

, यह सिर्फ एक वस्तु शाब्दिक JQuery को खिलाया जा रहा ajax विधि वस्तुओं है। 'पूर्ण' को सौंप दिया गया फ़ंक्शन http-प्रतिसाद प्राप्त होने पर फ़ंक्शन को खिलाया जाता है जो तर्क 'डेटा' के रूप में होता है जो .ajax विधि के अंदर स्थापित होता है।

2

अपडेटपेनल्स प्रदर्शन दृष्टिकोण से भयानक हैं। मैं jquery के साथ ऐसा करूँगा और पोस्टबैक से पूरी तरह से बचें।

$.ajax({ 
    url: "/path/to/url/that/returns/users", 
    type: "POST", 
    dataType: "json", 
    data: {}, 
    success: function(data, status, xhttp) 
    { 
     var html = "<table>"; 
     for (var i = 0; i < data.length; i++) 
     { 
      html += "<tr>"; 
      html += "<td></td>"; // build up table cells 
      html += "</tr>"; 
     } 
     html += "</table>"; 
     $("#NameOfDivToPutTableIn").html(html); 
    } 

}); 

यदि यह एक विकल्प, यूआरएल इस ट्यूटोरियल के आधार पर से पढ़ने के लिए की स्थापना की है:

http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

आप jQuery का उपयोग नहीं करना चाहते हैं, तो आप अभी भी उपयोग कर सकते हैं एमएस AJAX , बस उन अद्यतन पैनलों को छोड़ दें। http://www.geekzilla.co.uk/View7B75C93E-C8C9-4576-972B-2C3138DFC671.htm

1

<%@ Page MaintainScrollPositionOnPostback="true" %> Plage घोषणा स्क्रॉल स्थिति रखेंगे के रूप में यह

+1

क्षमा करें, केवल इतना ही कहें कि आपने पहले ही यह कोशिश की है :) – Spike

+0

यह पूरी तरह से 'पेज_लोड' विधि में काम करता है! धन्यवाद ... 'Page.MaintainScrollPositionOnPostBack = true; ' – Pierre

19

है अपने डिजाइन page..It मेरे लिए ठीक काम करता है पर निम्नलिखित कोड का प्रयास करें के रूप में ..

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="frmName.aspx.vb" Inherits="frmName" MaintainScrollPositionOnPostBack = "true" %> 
+0

यह हमेशा अच्छा होता है जब उत्तर इस तरह के मृत-सरल के रूप में होता है :) – dlchambers

-3
<pages maintainScrollPositionOnPostBack="true"> 
0

कोशिश इसके पीछे कोड में:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     Page.MaintainScrollPositionOnPostBack = true; 
    } 
} 

Posdata: मैं इसके साथ सी # की कोशिश की।

0

@{ 
 
    
 
} 
 

 
<html> 
 

 
<head> 
 
<script type="text/javascript"> 
 

 
window.onload = function() { 
 
    var div = document.getElementById("dvScroll"); 
 
    var div_position = document.getElementById("div_position"); 
 
    var position = parseInt(@Request.Form("div_position")); 
 
    if (isNaN(position)) { 
 
     position = 0; 
 
    } 
 

 
    div.scrollTop = position; 
 
    div.onscroll = function() { 
 
     div_position.value = div.scrollTop; 
 
    }; 
 
}; 
 

 
</script> 
 
</head> 
 

 
<body> 
 

 
<div id="dvScroll" style="overflow-y: scroll; height: 260px; width: 300px"> 
 
    1. This is a sample text 
 
    <br /> 
 
    2. This is a sample text 
 
    <br /> 
 
    3. This is a sample text 
 
    <br /> 
 
    4. This is a sample text 
 
    <br /> 
 
    5. This is a sample text 
 
    <br /> 
 
    6. This is a sample text 
 
    <br /> 
 
    7. This is a sample text 
 
    <br /> 
 
    8. This is a sample text 
 
    <br /> 
 
    9. This is a sample text 
 
    <br /> 
 
    10. This is a sample text 
 
    <br /> 
 
    11. This is a sample text 
 
    <br /> 
 
    12. This is a sample text 
 
    <br /> 
 
    13. This is a sample text 
 
    <br /> 
 
    14. This is a sample text 
 
    <br /> 
 
    15. This is a sample text 
 
    <br /> 
 
    16. This is a sample text 
 
    <br /> 
 
    17. This is a sample text 
 
    <br /> 
 
    18. This is a sample text 
 
    <br /> 
 
    19. This is a sample text 
 
    <br /> 
 
    20. This is a sample text 
 
    <br /> 
 
    21. This is a sample text 
 
    <br /> 
 
    22. This is a sample text 
 
    <br /> 
 
    23. This is a sample text 
 
    <br /> 
 
    24. This is a sample text 
 
    <br /> 
 
    25. This is a sample text 
 
    <br /> 
 
</div> 
 

 
<hr /> 
 
<form method="post"> 
 
<input type="hidden" id="div_position" name="div_position" /> 
 
<input type="submit" value="Cool" /> 
 
</form> 
 
</body> 
 
</html>

आप इस का उपयोग पोस्टबैक के बाद पुस्तक की स्थिति बनाए रखने के लिए कर सकते हैं।

स्रोत: http://www.aspsnippets.com/Articles/Maintain-Scroll-Position-of-DIV-on-PostBack-in-ASPNet.aspx

0

किसी और इस के साथ संघर्ष कर लिए। सबसे आसान समाधान पूरे विंडो के स्क्रॉल स्थान को रखना है

var xPos, yPos; 

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (evt, args) { 
     window.scrollTo(xPos , yPos); 
    }); 


    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (evt, args) { 
     xPos = $(window).scrollLeft(); 
     yPos = $(window).scrollTop(); 

    }); 

विज्ञापन दोनों प्रारंभ और समाप्ति अनुरोध। प्रारंभ अनुरोध पर Jquery का उपयोग कर विंडोज स्क्रॉल स्थिति प्राप्त करें। अंतिम अनुरोध पर बस उस स्थान पर स्क्रॉल करें।

0

इस लाइन जोड़े

<%@ Page MaintainScrollPositionOnPostback="true" %> 
0

वहाँ जवाब सभी इस समस्या का नेट पर हैं, और व्यक्तिगत रूप से उनमें से कोई भी काम किया, मेरे लिए के रूप में Firefox पिछले स्क्रॉल स्थिति (गलत तरीके से) को ठीक करने का प्रयास होता है, को गति प्रदान window.scroll इवेंट, जो मेरे छिपे हुए क्षेत्र को अपनी गलत स्थिति के साथ ओवरराइट करेगा, जो मेरे scrollTo को तब पढ़ा जाएगा। (मेरे पास कुछ पंक्तियों के स्वचालित ढहने के बाद पोस्टबैक से आने वाले ग्रिडव्यू हैं।)

तो यहां इस समस्या का एक और समाधान है - मैंने फैसला किया कि मैं केवल सबमिट के बाद स्क्रॉल स्थिति पुनर्प्राप्त करना चाहता हूं, ताज़ा नहीं, इसलिए यह था पर्याप्त:

ASPX पेज:

<form runat="server" onsubmit="$('#hfScroll').val($(window).scrollTop()); return true;"> 
    <input type="hidden" id="hfScroll" value="0" /> 

जावास्क्रिप्ट:

function restoreScroll() 
{ 
    var position = parseInt($('#hfScroll').val()); 
    if (!isNaN(position)) { 
     $(document).scrollTop(position); 
    } 
}; 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_pageLoaded(restoreScroll); 

किसी कारण से, ब्राउजर रीफ्रेश पर मेरा छुपा इनपुट शून्य पर रीसेट नहीं होता है, इसलिए यह कभी-कभी अजीब व्यवहार करता है। मुझे यह जानना अच्छा लगेगा कि यह क्या कर रहा है, मुझे लगता है कि यह फ़ायरफ़ॉक्स है क्योंकि यह आईई पर नहीं होता है, लेकिन जीवन बहुत छोटा है [वह कहता है ... इंटरनेट पर आधे डाउनलोड किए और इस पर घंटे बिताए ..]।

संबंधित मुद्दे