2010-09-30 22 views
8

के बाद FileUpload नियंत्रण का पथ रखें मेरे पास एक FileUpload नियंत्रण और एक DropDownlist नियंत्रण एक अद्यतन पैनेल में है और जब उपयोगकर्ता FileUpload नियंत्रण (अभी तक कोई अपलोड नहीं) के लिए फ़ाइल का चयन करता है, इस बीच उपयोगकर्ता ड्रॉपडाउनलिस्ट नियंत्रण से एक विकल्प चुनता है जो एक पोस्टबैक का कारण बन जाएगा! पृष्ठ पोस्टबैक के बाद, FileUpload नियंत्रण में चयनित पथ चला जाएगा। मैं FileUpload नियंत्रण में पथ कैसे बना सकता हूं? फाइल अपलोड करने का काम काम कर रहा था। मुझे उम्मीद है कि पोस्टबैक के दौरान FileUpload नियंत्रण में पथ रह सकता है।पोस्टबैक

मैंने नीचे दिए गए समाधान की कोशिश की है लेकिन "FileUpload1.HasFile" मेरे लिए झूठी वापसी करेगा।

  If Session("FileUpload1") Is Nothing AndAlso Upload.HasFile Then 
       Session("FileUpload1") = Upload 
       lblPhotoUploadErr.Text = Upload.FileName 
      ElseIf Session("FileUpload1") IsNot Nothing AndAlso (Not Upload.HasFile) Then 
       Upload = DirectCast(Session("FileUpload1"), FileUpload) 
       lblPhotoUploadErr.Text = Upload.FileName 
      ElseIf Upload.HasFile Then 
       Session("FileUpload1") = Upload 
       lblPhotoUploadErr.Text = Upload.FileName 
      End If 

लेकिन नीचे अपलोड किए गए फ़ंक्शन में "अपलोड.हासफ़ाइल" निष्पादित होने पर सत्य होगा।

Public Sub uploadPhoto() 
    Dim FileOK As Boolean = False 
    Dim FileSaved As Boolean = False 
    Dim CandidateCode As String = Nothing 
    Dim newFileName As String = Nothing 

    Dim extension As String = Nothing 
    Dim fileNameWithoutExt As String = Nothing 

    If txtCandidateCode.Text.Trim <> "" Then 
     CandidateCode = txtCandidateCode.Text.Trim 
    End If 

    If Upload.HasFile Then 
     Dim FileExtension As String = Path.GetExtension(Upload.FileName).ToLower 
     Dim allowedExtensions() As String = {".png", ".jpeg", ".jpg", ".gif"} 

     Dim i As Integer = 0 
     Do While (i < allowedExtensions.Length) 
      If (FileExtension = allowedExtensions(i)) Then 
       FileOK = True 
      End If 
      i = (i + 1) 
     Loop 
    End If 

    If FileOK Then 
     Try 
      fileNameWithoutExt = Path.GetFileNameWithoutExtension(Upload.FileName) 
      extension = Path.GetExtension(Upload.FileName) 
      newFileName = fileNameWithoutExt + "_" + CandidateCode + extension 

      Upload.PostedFile.SaveAs((path1 + newFileName)) 
      FileSaved = True 
     Catch ex As Exception 
      lblPhotoUploadErr.Text = ("File could not be uploaded." + ex.Message.ToString) 
      FileSaved = False 
     End Try 
    Else 
     lblPhotoUploadErr.Text = "Cannot accept files of this type." 
    End If 

    If FileSaved Then 
     pnlUpload.Visible = False 
     imgPhoto.ImageUrl = ("~/images/" + newFileName) 
     hfPhotoUploadPath.Value = ("~/images/" + newFileName) 

     hfFileExtension.Value = extension 
     hfPhotoUploadFileName.Value = fileNameWithoutExt 
    End If 
End Sub 

उत्तर

3

क्या ड्रॉपडाउन को पोस्टबैक की आवश्यकता है? मुझे लगता है कि फाइलअपलोड सुरक्षा कारणों से अपडेट पैनल्स के अंदर काम नहीं करता है। यहाँ देखें:

http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx

+0

हाँ! ड्रॉपडाउन को पोस्टबैक की ज़रूरत है! असल में, मैंने एक अद्यतन पैनेल के अंदर काम करने के लिए फ़ाइल अपलोड किया है और यह बहुत अच्छा काम कर रहा है! –

+0

आपने इसे कैसे काम किया? – adrianos

+0

मैंने पेज_लोड के तहत "पेज.फॉर्म.एट्रिब्यूट्स जोड़ें। (" एंटीटाइप "," मल्टीपार्ट/फॉर्म-डेटा ") जोड़ें और अपलोड बटन के लिए पोस्टबैक ट्रिगर है। –

-1

क्यों लटकती अक्षम नहीं है जब उपयोगकर्ता प्रपत्र सबमिट करता।

  • कुछ की तरह ...

    OnClientClick = "$ ('ड्रॉपडाउन') attr ('अक्षम', true);। Return true;"

बटन पर?

10

फ़ाइलउप्लोड केवल यह मान रखेगा यदि आप इसे अपडेटपेनल से बाहर ले जाते हैं। इस तरह आप अभी भी ड्रॉपडाउनलिस्ट और उसके ऑटोपोस्टबैक के साथ सब कुछ कर सकते हैं लेकिन AJAX-postback FileUpload को रीफ्रेश नहीं करेगा जिससे यह खाली हो जाएगा। इस तरह आपको पोस्टबैक्रिगर्स की और आवश्यकता नहीं है।

UpdatePanel केवल DropDownList के आसपास रखें और किसी भी नियंत्रण को पोस्टबैक को बदलना होगा। यदि ये नियंत्रण एक दूसरे के बगल में नहीं हैं तो आप एकाधिक अपडेटपैनल्स का उपयोग कर सकते हैं, ऑटोपोस्टबैक उन सभी को रीफ्रेश करेगा (डिफ़ॉल्ट व्यवहार, आप इसे भी बदल सकते हैं)।

1

अद्यतन पैनेल मोड को सशर्त पर सेट करें, और ड्रॉपडाउन को लपेटने वाला एक और अपडेट पैनेल रखें। इस तरह ड्रॉपडाउन फ़ाइल पोस्ट नहीं करेगा।

यदि आप एसिंक फ़ाइल अपलोड करना चाहते हैं, तो आप सक्षम नहीं होंगे, लेकिन आप इसे नकली बना सकते हैं।

this project पर एक नज़र डालें, यह form के लक्ष्य को बदलता है, इसलिए आपके पृष्ठ पर कुछ भी नहीं बदलेगा, यह एक आईफ्रेम पर पोस्ट करेगा।

2

मुझे लगता है कि मैं एक समाधान मिला:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Session["FileUpload1"] = null; 
    } 
    else 
    { 
     if (FileUpload1.HasFile) 
     { 
      Session["FileUpload1"] = FileUpload1; 
      TextBox1.Text = FileUpload1.FileName; 
     } 
     else if (Session["FileUpload1"] != null) 
     { 
      FileUpload1 = (FileUpload)Session["FileUpload1"]; 
      TextBox1.Text = FileUpload1.FileName; 
     } 
    } 
} 

 

<span class="spanFu"> 
    <asp:TextBox ID="TextBox1" Text="Select a file..." runat="server" CssClass="txt" ReadOnly="true" /> 
    <asp:FileUpload ID="FileUpload1" runat="server" onchange="File_OnChange(this)" CssClass="fu" /> 
</span> 

<script> 
function File_OnChange(sender) { 
    val = sender.value.split('\\'); 
    document.getElementById('<%= TextBox1.ClientID %>').value = val[val.length - 1]; 
} 
</script> 

<style> 
.spanFu .txt { width: 200px; height: 20px; } 
.spanFu { position: relative; overflow: hidden; vertical-align: top; } 
.fu { z-index: 1; width: 200px; height: 24px; position: absolute; top: 0px; 
    left: 0px; filter: alpha(opacity=0); opacity: .0; } 
</style> 
2

UpdatePanel के बाहर अपने fileupload नियंत्रण रखो ताकि अतुल्यकालिक dropdownlist की वजह से पोस्टबैक FileUpload नियंत्रण को प्रभावित नहीं करेगा।उदाहरण (सरलीकृत):

<asp:FileUpload runat="server" /> 

<asp:UpdatePanel runat="server"> 
    <asp:dropdownlist runat="server" autopostback="true" /> 
</asp:UpdatePanel> 

<asp:button runat="server" text="Submit" /> 

अतिरिक्त नोट: ऐसा लगता है कि आप अपने सत्र में FileUpload नियंत्रण संग्रहीत कर रहे हैं। यह वास्तव में एक अच्छा विचार नहीं है और आपको कुछ समस्या ला सकता है, उदा। जब आपके उपयोगकर्ता एकाधिक ब्राउज़र टैब/विंडो का उपयोग करके एक ही पृष्ठ खोलते हैं। और, मुझे लगता है कि आप फ़ाइल अपलोड/फ़ाइलबाइट/फ़ाइल अपलोड नियंत्रण के अन्य गुणों को सहेजना चाहते हैं, पूरे नियंत्रण को सत्र में संग्रहीत करना जो आपके सर्वर संसाधनों को अधिक खाएगा।