2010-04-10 12 views
23

मेरे पास कुछ टेक्स्टबॉक्स और सबमिट बटन के साथ एक सरल एएसपीएक्स पृष्ठ है। कुछ फ़ील्ड आवश्यक हैं और बटन के नीचे एक सत्यापन सारांश है। पूरा फॉर्म स्क्रीन ऊंचाई से बड़ा है इसलिए सबमिट बटन तक पहुंचने के लिए किसी को स्क्रॉल करना होगा। यदि मैं सभी आवश्यक फ़ील्ड भर नहीं पाता हूं और सबमिट सत्यापन पर क्लिक करता हूं तो उम्मीद के अनुसार विफल रहता है और सत्यापन सारांश बटन के नीचे कुछ जानकारी संदेश प्रदर्शित करता है। ग्राहक पर सत्यापन होता है और कोई पोस्टबैक नहीं होता है।असफल सत्यापन के बाद मैं पृष्ठ को शीर्ष स्थान पर कैसे जा सकता हूं?

तो यह सब कामना करता है। लेकिन परेशान करना यह है कि जब मैं सबमिट बटन पर क्लिक करता हूं तो पृष्ठ शीर्ष स्थान पर जाता है ("कूदता है")। सत्यापन सारांश देखने के लिए किसी को पृष्ठ को फिर से स्थानांतरित करना होगा।

मैंने ShowSummary संपत्ति को false (जो अधिक समझ में नहीं आता है) सेट करने का प्रयास किया है: सत्यापन अभी भी काम करता है (कोई पोस्टबैक नहीं) लेकिन इस मामले में पृष्ठ शीर्ष स्थान पर नहीं जाता है। तो समस्या सत्यापन ग्रंथों को प्रस्तुत करने पर निर्भर करती है।

क्या इस पृष्ठ को रोकने के लिए कोई तरीका है?

अग्रिम धन्यवाद!

अद्यतन:

व्यवहार मैं ऊपर वर्णित ब्राउज़र निर्भर होना प्रतीत नहीं होता। मैंने पांच अलग-अलग ब्राउज़रों में परीक्षण किया है और यह हर जगह समान है। कोड-पीछे में

:

Page.MaintainScrollPositionOnPostBack = true; 

या अपने वेबफ़ॉर्म में:

+0

भी देखें http://stackoverflow.com/questions/699171/asp-net-validation-summary-causes-page-to-jump-to-top –

उत्तर

29

मैं एएसपी पर प्रश्न पूछा गया है .NET (http://forums.asp.net/p/1545969/3779312.aspx) और दो समाधानों के साथ जवाब मिला।

<script type="text/javascript"> 
    window.scrollTo = function(x,y) 
    { 
     return true; 
    } 
</script> 

इस पृष्ठ पर डाल और कहीं नहीं कॉल करने के लिए ही है: बेहतर एक जावास्क्रिप्ट के इस टुकड़े जो स्क्रॉल बना रखा है।

दूसरा समाधान रियोटेरा के प्रस्ताव के समान है (MaintainScrollPositionOnPostBack का उपयोग करके) लेकिन EnableClientScript="false" को पोस्टबैक को बल देने के लिए सत्यापनकर्ताओं को जोड़ता है। यह भी काम करता है, लेकिन कीमत एक कृत्रिम पोस्टबैक है।

+0

यह बहुत अच्छा है। पोस्ट करने के लिए धन्यवाद ... त्वरित प्रश्न: यदि जावास्क्रिप्ट अक्षम है तो क्या होगा? – nicorellius

+1

@nicorellius: तो यह काम नहीं करेगा। मुझे लगता है कि 'Page.MaintainScrollPositionOnPostBack' को जावास्क्रिप्ट को भी सक्षम करने की आवश्यकता है। मुझे नहीं पता कि जावास्क्रिप्ट के बिना कोई समाधान है या नहीं। – Slauma

23

आप पृष्ठ संपत्ति MaintainScrollPositionOnPostBack उपयोग कर सकते हैं

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" MaintainScrollPositionOnPostback="true" %> 
+1

के बाद से मेरे पास नहीं है यह काम नहीं करता है एक पोस्टबैक प्रमाणीकरण क्लाइंट पक्ष पर विफल रहता है और यह "पृष्ठ कूद" एक शुद्ध ग्राहक पक्ष व्यवहार प्रतीत होता है। – Slauma

+0

यह एक मास्टर पेज पर पृष्ठ निर्देश में काम नहीं करता है। इस मामले में, आप इसे web.config फ़ाइल में system.web/पृष्ठों में विशेषता रखरखाव पर स्थापित कर सकते हैं crollPositionOnPostBack – rdans

6

पेज फोकस Page.SetFocus(control); सेट करने का प्रयास मैं एक डालने बटन जो मेरे gridview है, जो एक पृष्ठ पर कई मदों में से एक इसलिए मैं अपने btnInsert_Click घटना में पिछले पद्धति के रूप में Page.SetFocus(control) जोड़ सकते हैं करने के लिए एक अतिरिक्त पंक्ति कहते हैं की है।

+0

धन्यवाद। यह मेरे लिए काम किया। MaintainScrollPositionOnPostback का उपयोग करके पृष्ठ फ़्लैश बना दिया। मुझे नियंत्रण मिला। फोकस() पेज से थोड़ा आसान था। सैटफ़ोकस (नियंत्रण)। – NoBullMan

1

पृष्ठ झिलमिलाहट करता है क्योंकि पूरा पृष्ठ सर्वर पर वापस पोस्ट किया जाता है और सामग्री को सर्वर से फिर से भेजा जाता है। उस स्थान को घेरने के लिए आपको अपडेटपेनल टैग का उपयोग करना होगा, जिसे आप रीफ्रेश करना चाहते हैं। यह केवल जानकारी जो टैग

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
    <!-- Place updatable markup and controls here. --> 
</ContentTemplate> 
</asp:UpdatePanel> 

अंदर है postback जाएगा पढ़ें http://msdn.microsoft.com/en-us/library/bb386573(v=vs.100).aspx#CodeExamples

0

दुर्भाग्य MantainScrollPositionOnPostback आधुनिक ब्राउज़रों पर अब और काम नहीं करता। एक क्रॉस-ब्राउज़र-संगत समाधान आप इस स्निपेट का उपयोग कर सकते हैं (jQuery की आवश्यकता है):

<asp:HiddenField runat="server" ID="hfPosition" Value="" /> 
<script type="text/javascript"> 
    $(function() { 
     var f = $("#<%=hfPosition.ClientID%>"); 
     window.onload = function() { 
      var position = parseInt(f.val()); 
      if (!isNaN(position)) { 
       $(window).scrollTop(position); 
      } 
     }; 
     window.onscroll = function() { 
      var position = $(window).scrollTop(); 
      f.val(position); 
     }; 
    }); 
</script> 

भी मेरा उत्तर here देखें।

3

मैंने पाया कि संपत्ति की स्थापना है: आपके Web.config <pages> खंड में

maintainScrollPositionOnPostBack="true" 

अच्छी तरह से काम करता है।

0

मैं एमवीसी 5 का उपयोग कर रहा हूं और कूद को रोकने का एकमात्र तरीका नीचे JQuery कोड के साथ था।

मैंने सफारी, क्रोम, मोज़िला, इंटरनेट एक्सप्लोरर और ओपेरा पर समाधान का परीक्षण किया है।

$(document).scrollTop($('form#formCheckout').offset().top); 
    event.stopPropagation(); 
    event.preventDefault(); 
संबंधित मुद्दे

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