मेरे पास एक छिपी हुई फ़ील्ड है जिसे मैं एक बटन पर क्लिक करने के बाद जावास्क्रिप्ट के माध्यम से अपडेट कर रहा हूं, लेकिन जब मैं इसे कोड पर एक्सेस करने का प्रयास करता हूं तो जब तक मैं दूसरी बार बटन पर क्लिक नहीं करता तब तक कोई मूल्य नहीं होता है। जब मैं ब्राउज़र के माध्यम से इसका निरीक्षण करता हूं तो मैं छिपे हुए फ़ील्ड मान को देखने में सक्षम होता हूं।

Gradle EAR dengan lib transitif dari proyek lain

<script type="text/javascript">
    function LoadHtml(inputState, inputStateAbbr, inputProgramType, inputHealthCenter, inputCity) {

        $.ajax({
            url: omitted,
            type: "POST",
            async: false,
            data: {
                state: inputState,
                stateAbbr: inputStateAbbr,
                programType: inputProgramType,
                healthCenter: inputHealthCenter,
                city: inputCity
            },

            success: function(result) {
                document.getElementById('DataHiddenField').value = result;

            },
            error: function (jqXHR, textStatus, errorThrown) {
                //omitted
            }
        });
    }
</script>

<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" CssClass="top-buffer" Text="Compare Sites" />

<asp:HiddenField ID="DataHiddenField" runat="server" ClientIDMode="Static" />

कोड के पीछे

protected void Button1_OnClick(object sender, EventArgs e)
{
    RetrieveHtml();
}

private string RetrieveHtml(){
    Page.ClientScript.RegisterStartupScript(this.GetType(), "MyKey1", "LoadHtml('Alabama', 'AL', 'Program Awardee Data', 'Alabama Regional Medical Services', 'Birmingham');", true);
    return DataHiddenField.Value;
}
0
De Vonte 18 नवम्बर 2019, 20:12

2 जवाब

सबसे बढ़िया उत्तर

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

आइए आपके कोड को विच्छेदित करें:

<!-- Causes a postback to the server, no javascript run yet -->
<asp:Button ID="Button1" runat="server" OnClick="Button1_OnClick" CssClass="top-buffer" Text="Compare Sites" />

कोड के पीछे

private string RetrieveHtml(){
  /*Tells the page to run this script - WHEN IT NEXT LOADS*/
   Page.ClientScript.RegisterStartupScript(this.GetType(), "MyKey1", "LoadHtml('Alabama', 'AL', 'Program Awardee Data', 'Alabama Regional Medical Services', 'Birmingham');", true);
   /*Gets the value from the hidden field.*/
   /*On first click the above java-script HAS NOT RUN*/
   return DataHiddenField.Value;
}

/*After the server has finished work, it sends a new page response.*/
/*THEN the javascript runs*/

तो तुम्हें क्या करने की जरूरत है?

1
Jon P 19 नवम्बर 2019, 04:17

कारण यह है कि आप पहले बटन क्लिक पर छिपे हुए फ़ील्ड की सामग्री नहीं देख सकते हैं क्योंकि बटन पर क्लिक करने के बाद आपकी छिपी हुई फ़ील्ड सामग्री क्लाइंट साइड पर भर जाती है। भूतपूर्व:

1º ग्राहक पक्ष: उपयोगकर्ता बटन 1 पर क्लिक करता है

2º सर्वर साइड: मेथड RetrieveHtml प्रदान किए गए पैरामीटर के साथ LoadHtml मेथड को चलाने के लिए क्लाइंट साइड को "ऑर्डर" भेजता है। इस समय DataHiddenField.Value सर्वर साइड में दिखाई नहीं दे रहा है क्योंकि LoadHtml अभी तक निष्पादित नहीं किया गया था।

3º क्लाइंट साइड: लोडएचटीएमएल निष्पादित करता है जो सर्वर साइड को छोड़े गए यूआरएल पर कॉल करता है।

4º सर्वर साइड: छोड़े गए यूआरएल में कोड निष्पादित करें और क्लाइंट साइड पर सामग्री लौटाएं।

5º क्लाइंट साइड: सक्सेस फंक्शन DataHiddenField पर कंटेंट जोड़ता है। केवल अब आप इस सामग्री को सर्वर साइड पर देख पाएंगे।

अवलोकन: DataHiddenField.Value हमेशा RetrieveHtml विधि के अंदर अंतिम निष्पादन से संबंधित होगा।

क्या आप बटन 1 पर घड़ी से पहले ब्राउज़र पर इसका निरीक्षण करने पर छिपे हुए फ़ील्ड मान को देख पा रहे हैं?

0
Lutti Coelho 19 नवम्बर 2019, 00:45