2009-03-30 1 views
51

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

<asp:TextBox ID="test" runat="server"></asp:TextBox> 
<asp:RequiredFieldValidator ID="testrequired" runat="server" ControlToValidate="test">*</asp:RequiredFieldValidator> 
<asp:ValidationSummary ID="summary" runat="server" /> 
<asp:Button ID="submit" runat="server" Text="submit" /> 

मैं स्थापित करने की कोशिश की किया है आवश्यक फ़ील्ड validator में SetFocusOnError="true" और MaintainScrollPositionOnPostback="true" गिगल्स के लिए:

उसके बारे में यहां त्वरित उदाहरण

। क्या इस समस्या के लिए कोई ज्ञात समाधान है?

संपादित करें:

मैं WebResource.axd द्वारा उत्पन्न js में समस्या पाया है। ValidationSummaryOnSubmit() फ़ंक्शन में एक पंक्ति में नीचे आने लगता है।

line 534: window.scrollTo(0,0); 

इस पर किसी भी विचार को हटाने या बाईपास करने के बारे में कोई विचार?

EDIT2:

त्वरित चारों ओर समय से किया जा रहा के लिए काम करते:

  • सभी मान्यता नियंत्रण के लिए निर्धारित EnableClientScript="false" (ग्राहक सत्यापन अक्षम करने)
  • पृष्ठ निर्देश में MaintainScrollPositionOnPostback="true" सेट

अभी भी एक ग्राहक पक्ष समाधान की उम्मीद है ...

EDIT3:

यह चारों ओर एक बेहतर काम लगता है जब मान्यता स्क्रिप्ट के द्वारा कहा जाता है सिर्फ इतना है कि यह कुछ नहीं करता है window.scrollTo() समारोह ओवरराइड करने के लिए है:

<script type="text/javascript"> 
    window.scrollTo = function() { } 
</script> 

पर कहीं भी ऊपर जोड़ना पृष्ठ व्यवहार में क्लाइंट सत्यापन को छोड़ देता है, लेकिन विधि को पूरे पृष्ठ

+0

मैं इससे परिचित नहीं हूं, लेकिन क्या यह आपके यूआरएल के अंत में '#' जोड़ता है? कभी-कभी यह पृष्ठ को शीर्ष पर कूदने का कारण बनता है। –

+0

@cory, कोई एचटीएमएल एक सबमिट बटन इनपुट उत्पन्न नहीं करता है एंकर लिंक – Adam

+0

संपादन 3 के लिए: यह तब मदद नहीं करता है जब आपके पास पृष्ठ के शीर्ष पर और नीचे एक सत्यापन प्रमाण हो। शीर्ष पर कभी फोकस नहीं होता है। –

उत्तर

41

दो संभव काम arounds:

ग्राहक सत्यापन और कूद अक्षम वापस पोस्ट पर स्थिति को दूर करने के:

* set EnableClientScript="false" for all validation controls (disabling client validation) 
* set MaintainScrollPositionOnPostback="true" in Page directive 

जावास्क्रिप्ट में scrollTo समारोह को अक्षम करें:

<script type="text/javascript"> 
    window.scrollTo = function() { } 
</script> 
+1

यह मेरे लिए तय किया गया है: <% @ पृष्ठ भाषा = "सी #" ऑटोवेन्टवायरअप = "सत्य" कोडफाइल = "Default.aspx.cs" इनहेरिट्स = "_ डिफ़ॉल्ट" रखरखाव स्क्रॉलपॉजिशनऑनपोस्टबैक = "सत्य"%> –

+1

यह जीता ' पृष्ठ पर दो सारांश हैं (शीर्ष पर 1, नीचे 2 सेकंड) –

+0

-1, मेरे लिए काम नहीं किया है, तो शीर्ष पर सारांश पर ध्यान केंद्रित करें। मुझे क्लाइंट साइड और सर्वर साइड सत्यापन का मिश्रण मिला है। स्क्रॉल को ठीक करने के लिए इन विधियों में से किसी एक का उपयोग पृष्ठ को दूसरे के लिए शीर्ष पर स्क्रॉल करने का कारण बन जाएगा। दोनों का उपयोग करना इसे ठीक नहीं करता है। – jcollum

-2

अपने HTML के लिए लक्ष्य स्कीमा सेट करने को अक्षम करता है।

http://msdn.microsoft.com/en-us/library/6379d90d(VS.71).aspx

वी.एस. 2005 से पहले आप पृष्ठ के स्तर से एक पृष्ठ पर स्कीमा सेट कर सकते हैं की कोशिश करो।

बस एक विचार।

+0

मुझे यकीन नहीं है कि मैं अनुसरण करता हूं। यह ब्राउज़र विशिष्ट – Adam

+0

प्रतीत नहीं होता है कथन सुसंगत नहीं है। और विचार उत्तर के रूप में उपयुक्त नहीं हैं। वे टिप्पणी के रूप में हैं !!!!!! –

0

पृष्ठ जहां भी आपका सत्यापन सारांश है, वहां जा रहा है। यदि आप इसे नीचे के पास रखना चाहते हैं, तो सबमिट बटन के पास सत्यापन सारांश को नीचे ले जाएं।

संपादित करें, आप सत्यापन सारांश को बंद करने का भी प्रयास कर सकते हैं।

+0

@ सोसमेस्टर, पृष्ठ शीर्ष पर कूदता है इससे कोई फर्क नहीं पड़ता कि मैंने सत्यापन सारांश कहाँ रखा है। जब मैं सत्यापन सारांश बंद करता हूं, तो यह चारों ओर कूद नहीं जाता है, लेकिन दुर्भाग्य से यह एक चीज है जो – Adam

+0

ठीक है। मुझे लगता है कि जमा करने पर नियंत्रण कॉल फोकस करने के लिए आप कुछ जावास्क्रिप्ट लिखना बंद कर सकते हैं। एक त्वरित Google खोज ने इस मंच को वापस कर दिया (http://forums.asp.net/t/1089469.aspx) विषय। क्षमा करें और शुभकामनाएं। – AndyG

+0

मेरे पास 3 सारांश हैं, और यह हमेशा शीर्ष पर कूदता है। – thomasb

-1

शायद आप आवश्यक फ़ील्ड वैलिडेटर से उत्तराधिकारी हो सकते हैं और कस्टम नियंत्रण में क्लाइंट साइड सत्यापन को ओवरराइड कर सकते हैं?

0

मैं में चल रहा था एक समस्या जहां MaintainScrollPositionOnPostback=true का उपयोग काम करेगा लेकिन क्लाइंट-साइड सत्यापन स्क्रॉल स्थिति तोड़ देगा। इसलिए मैंने पोस्टबैक पर सत्यापन सारांश नियंत्रण को लाने के लिए एक स्क्रिप्ट जोड़ा।

private void FocusControlOnPageLoad(Control ctrl) 
    { 

     this.Page.ClientScript.RegisterClientScriptBlock(
      typeof(System.Web.UI.Page), "ctrlFocus", 
     @"<script> 
       function ScrollView() 
       { 
       var el = document.getElementById('" + ctrl.ClientID + @"') 
       if (el != null) 
       {   
        el.scrollIntoView(); 
        el.focus(); 
       } 
       } 
       window.onload = ScrollView; 
     </script>"); 
    } 

साथ:

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    if (Page.IsValid == false) 
     { 
      FocusControlOnPageLoad(TheValidationSummary); 
     } 
} 

ऐसा लगता है मैं भी scrollTo समारोह बाहर blanked करना होगा कि:

window.scrollTo = function() { 
      return true; 
     } 

कोड (अधिकतर) from here मिल गया।

15

यह एक known bug है, जैसा कि माइक्रोसॉफ्ट कनेक्ट पर प्रलेखित है। relevant issue चारों ओर सबसे अच्छा काम के लिए आधार नहीं है:

var ValidationSummaryOnSubmitOrig = ValidationSummaryOnSubmit; 
var ValidationSummaryOnSubmit = function() { 
    var scrollToOrig = window.scrollTo; 
    window.scrollTo = function() { }; 
    var retVal = ValidationSummaryOnSubmitOrig(); 
    window.scrollTo = scrollToOrig; 
    return retVal; 
} 
+5

उस मुद्दे की टिप्पणियों में कार्यवाही सत्यापन समूहों के लिए जिम्मेदार नहीं है, और वैश्विक चरम में नए चर पेश करती है। इस मुद्दे के वर्कअराउंड टैब पर, मैंने एक अद्यतन वर्कअराउंड पोस्ट किया है जो उन मुद्दों को ध्यान में रखता है। – bdukes

+2

यहाँ, @bdukes का अद्यतन समाधान नहीं है मामले में लिंक किए गए पृष्ठ गुम हो जाता है: '(function() { वर originalValidationSummaryOnSubmit = window.ValidationSummaryOnSubmit; window.ValidationSummaryOnSubmit = समारोह (validationGroup) { वर originalScrollTo = window.scrollTo ; window.scrollTo = समारोह() {}; originalValidationSummaryOnSubmit (validationGroup); window.scrollTo = originalScrollTo; } }()); ' –

+0

@Frederic, आपको लगता है कि अद्यतन वैकल्पिक हल तो यह एक पूर्ण जवाब के रूप में पोस्ट करना चाहिए एक स्वीकृति क्लेक और bdukes के साथ, मतदान किया जा सकता है। –

11

के बजाय

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

जो अंधाधुंध सभी Postbacks के लिए ScrollTo समारोह को ओवरराइड करेगी, मैं बटन की मेरी OnClientClick घटना में समारोह डाल दिया। नीचे के अनुसार।

onClientClick="window.scrollTo = function(x,y) { return true; };" 

सुनिश्चित नहीं है कि यह सबसे अच्छा समाधान है, लेकिन ऐसा लगता है कि यह मेरे लिए काम करता है। (JQuery की आवश्यकता है और jquery.scrollTo)

सबसे पहले आप एक लंगर एक विशिष्ट वर्ग के साथ अपने मान्यता सारांश के ऊपर है, तो जैसे डाल:

<a class="custom_valsum_anchor" /> 
<asp:ValidationSummary ID="valSum" runat="server" EnableClientScript="true" /> 

तो इस बिट शामिल

+0

एक समझदार सुझाव जो महान काम करता है और दूसरों द्वारा खोजे गए अन्य नुकसान से बचाता है। +1 – EvilDr

+1

बटन क्लिक होने तक यह एक बार काम करता है, फिर स्क्रॉलो खो जाता है –

5

मैं इस का उपयोग जावास्क्रिप्ट का:

$(document).ready(
     function() { 
      var $valSum = $(".custom_valsum_anchor"); 
      if ($valSum.size() > 0) { 
       var backup_ValidationSummaryOnSubmit = ValidationSummaryOnSubmit; 
       ValidationSummaryOnSubmit = function (validationGroup) { 
        var backup_ScrollTo = window.scrollTo; 
        window.scrollTo = function() { }; 
        backup_ValidationSummaryOnSubmit(validationGroup); 
        window.scrollTo = backup_ScrollTo; 
        setTimeout(function() { $("body").scrollTo($valSum); }, 1); 
       }; 
      } 
     } 

); 

मूल रूप से, यह बदल देता है, जब आवश्यक हो, एक संस्करण था साथ ValidationSummaryOnSubmit समारोह टी अस्थायी रूप से window.scrollTo अक्षम करता है और एंकर पर स्क्रॉल करता है। इसे संशोधित करना मुश्किल नहीं होना चाहिए ताकि यह jquery का उपयोग न करे।

9

जैसा कि cleek's answer द्वारा बताया गया है, यह known bug वर्कअराउंड है।

यहां bdukes one है, जो मुझे वर्तमान में उपलब्ध सर्वोत्तम रूप में दिखता है।

(function() { 
    var originalValidationSummaryOnSubmit = window.ValidationSummaryOnSubmit; 
    window.ValidationSummaryOnSubmit = function (validationGroup) { 
    var originalScrollTo = window.scrollTo; 
    window.scrollTo = function() { }; 
    originalValidationSummaryOnSubmit(validationGroup); 
    window.scrollTo = originalScrollTo; 
    } 
}()); 

(वह इसे सीधे इतने पर यहां पोस्ट नहीं है, और अब connect issue देखा जा रहा है के लिए पंजीकरण की है, जो अपने वैकल्पिक हल का उपयोग करने के लिए कठिन बना देता की आवश्यकता होती है लगता है।)