आवश्यकताओंएक अद्यतन पैनल के अंदर सर्वर पर स्वचालित फ़ाइल अपलोड करने के लिए पहली बार काम नहीं करता है
मैं एक फ़ाइल अपलोड करने की कोशिश कर रहा हूँ के रूप में जल्द ही एक उपयोगकर्ता यह चयन करता है के रूप में। मुझे निम्नलिखित आवश्यकताओं को पूरा करना होगा:
- बटन एप्लिकेशन में अन्य बटनों की तरह दिखता है।
- जैसे ही उपयोगकर्ता इसे चुनता है फ़ाइल अपलोड हो जाती है।
- मुझे इसे अपडेटपेनल में होना चाहिए क्योंकि मुझे पृष्ठ पर सशर्त अपडेट करना है। I चयनित फ़ाइल पर एक पूर्ण पोस्टबैक करें (a.k.a
onchange
) ईवेंट।
वर्तमान कोड
के बाद कैसे मेरे विचार फ़ाइल लग रहा है:
<asp:UpdatePanel ID="upData" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<div style="width: auto; float: right;">
<asp:Button ID="btnFileImportSkin" CssClass="ButtonSkin AddButton" Text="Import" Style="position: absolute; z-index: 2;" runat="server" OnClientClick="Javascript:onImport(); return false;" />
<asp:FileUpload ID="fileImport" Visible="false" Style="position:relative; opacity:0;" runat="server" onchange="Javascript:onFileSelected();" />
<%-- onchange="Javascript:this.form.submit();" /> --%>
<%-- <asp:Button ID="btnUpload" runat="server" OnClientClick="Javascript:alert('Uploading...'); __doPostBack('<%= btnUpload.ID %>', ''); return false;" /> --%>
<asp:Button ID="btnUpload" OnClick="btnUpload_Click" runat="server" />
</div>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
</asp:UpdatePanel>
प्रासंगिक जावास्क्रिप्ट:
<script type="text/javascript">
function onImport() {
var fileImportClientId = '<%= fileImport.ClientID %>';
document.getElementById(fileImportClientId).click();
}
function onFileSelected() {
alert("File Selected");
// I have tried calling the function directly and with a timeout
setTimeout(onUpload, 20);
}
function onUpload() {
var btnUploadClientId = '<%= btnUpload.ClientID %>';
document.getElementById(btnUploadClientId).click();
}
</script>
कोड के पीछे:
protected void btnUpload_Click(object sender, EventArgs e)
{
// PostedFile is null first time code gets here on user selecting a file
if (fileImport.PostedFile != null)
{
if (fileImport.PostedFile.FileName.Length > 0)
{
ImportFromFile();
}
}
}
स्पष्टीकरण/फ्लो
- उपयोगकर्ता
btnFileImportSkin
बटन पर क्लिक करता है। - फ़ंक्शन
onImport
कहा जाता है, जोfileimport
बटन पर प्रोग्रामेटिक रूप से क्लिक करता है। - उपयोगकर्ता एक फ़ाइल का चयन करता है, और ओपन दबाता है।
onFileSelected
कहा जाता है।onUpload
सफलतापूर्वक कहा जाता है।btnUpload_Click
सफलतापूर्वक हर बार बुलाया जाता है।
हालांकिसमस्या कि
fileImport.PostedFile अशक्त पहली बार उपयोगकर्ता एक फ़ाइल का चयन करता है। सब कुछ दूसरी बार और वहां से ठीक काम करता है।
संबंधित
This question बारीकी से मेरी समस्या से संबंधित है, लेकिन ओ पी शायद Gmail में के रूप में एक Async अपलोड समाधान चाहता था। की btnUpload
FileUpload
नियंत्रण के onchange घटना में
- __doPostBack(): मैं पहले से ही इस सवाल का जवाब में के रूप में निम्न कार्य कोशिश की है।
- Page_PreRender में
अतिरिक्त नोट्स
- यह बात पूरी तरह से काम किया
FileUpload
नियंत्रण के onchange विशेषता स्थापना मैं अद्यतन पैनल नहीं था जब। मैं यह कर रहा था .form.submit() सीधेFileUpload
नियंत्रण के चालू आयोजन में। - लक्ष्य ढांचे नेट 4,0
नोट है: जोड़ा गया एक दर्शनीय = "false" ऊपर FileUpload
नियंत्रण में। यह समस्या थी लेकिन प्रश्न पूछते समय मैंने इसे अनदेखा कर दिया था।
दोनों एचटीएमएल और जावास्क्रिप्ट उपयोगकर्ता नियंत्रण में हैं। –
क्या आप वाकई पहली बार काम करते हैं? यह मेरे लिए भी काम करता है जब मैं दूसरी बार 'btnFileImportSkin' पर क्लिक करता हूं। –
हां, मैं 110% हूं। :) मैं केवल एक बार बटन पर क्लिक करता हूं और कोड हर बार ब्रेकपॉइंट को पहली बार हिट करता है। – BeeTee2