2013-11-26 5 views
8

मैं एक रूपअपलोड एक रूप MVC4 में एक से अधिक फ़ाइलों

@using (Html.BeginForm("Create", "AdminRestaurants", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
<div class="form-group"> 
    <label for="logoFile" class="col-sm-2 control-label">Logo:</label> 
    <div class="col-sm-6"> 
     <input type="file" multiple="" name="logoFile" id="logoFile" /> 
    </div> 
</div> 
<div class="form-group"> 
    <label for="fohFile" class="col-sm-2 control-label">FOH Logo:</label> 
    <div class="col-sm-6"> 
     <input type="file" multiple="" name="fohFile" id="fohFile" /> 
    </div> 
</div> 
<div class="form-group"> 
    <label for="bohFile" class="col-sm-2 control-label">BOH Logo:</label> 
    <div class="col-sm-6"> 
     <input type="file" multiple="" name="bohFile" id="bohFile" /> 
    </div> 
</div> 
<div class="form-group"> 
    <label for="mgmFile" class="col-sm-2 control-label">MGM Logo:</label> 
    <div class="col-sm-6"> 
     <input type="file" multiple="" name="mgmFile" id="mgmFile" /> 
    </div> 
</div> 
मैं इस

public ActionResult Create(IEnumerable<HttpPostedFileBase> files, RestaurantModel collection) 
{ 
    if (ViewData.ModelState.IsValid) 
    { 
    } 
} 

वर्तमान में कुछ भी नहीं के साथ नियंत्रक पर प्रपत्र कार्रवाई करने के लिए कोशिश कर रहा हूँ

पर एक से अधिक छवियों को अपलोड करने की कोशिश कर रहा हूँ नियंत्रक पर files हस्ताक्षर में दिखाया गया है। यह जब केवल एक फ़ाइल के साथ काम कर अच्छा काम करने लगता है

public ActionResult Create(HttpPostedFileBase file, EventsModel collection) 

किसी दिशा में मुझे बात कर सकते हैं एक प्रस्तुत फार्म के साथ अपलोड करने की एक से अधिक फ़ाइलों अनुमति देने के लिए?

उत्तर

15

आपकी समस्या आप फार्म कि जानकारी है कि मॉडल बांधने की मशीन बाध्य कर सकते हैं क्योंकि नामकरण परंपरा ठीक नहीं है के साथ एक पोस्ट अनुरोध बनाता है।

आप देखते हैं, आप एक अलग नाम के साथ 4 फ़ाइल क्षेत्र एक है, मॉडल बांधने की मशीन उन्हें सही ढंग से बाध्य करने के लिए अपने नियंत्रक कार्रवाई हस्ताक्षर इस तरह दिखना चाहिए:

public ActionResult Create(HttpPostedFileBase mgmFile, 
          HttpPostedFileBase logoFile, 
          HttpPostedFileBase fohFile , 
          HttpPostedFileBase bohFile) 

MCV डिज़ाइन पैटर्न सबसे अच्छा विकल्प होगा के बाद एक ViewModel है कि एक IEnumerable<HttpPostedFileBase> रखती उपयोग करने के लिए हो सकता है और आप आपको लगता है कि जैसे कि यह इस्तेमाल कर सकते हैं कि एक IEnumerable<HttpPostedFileBase>

के लिए एक कस्टम संपादक टेम्पलेट बनाने हैं तो:

Html.EditorFor(m=>Model.filesUploaded) 

और अपने नियंत्रक कार्रवाई इस प्रकार दिखाई देगा:

public ActionResult Create(MyViewModel i_InputModel) 
{ 
    i_InputModel.filesUploade; //Use the files here to upload them. 
} 

अन्य विकल्प हैं: उपयोग इस तरह फ़ाइल इनपुट क्षेत्र पर एचटीएमएल 5 कई विशेषता:

<label for="mgmFile" class="col-sm-2 control-label">Files:</label> 
<div class="col-sm-6"> 
    <input type="file" multiple="multiple" name="files" id="files" /> 
</div> 

और एक नियंत्रक इस तरह की कार्रवाई:

public ActionResult Create(HttpPostedFileBase files) 

या उनके नाम से अधिक फ़ाइल क्षेत्रों लेकिन उनमें सूचकांक का उपयोग करें:

<input type="file" multiple="multiple" name="files[0]" id="files_1" /> 
<input type="file" multiple="multiple" name="files[1]" id="files_2" /> 
<input type="file" multiple="multiple" name="files[2]" id="files_3" /> 
<input type="file" multiple="multiple" name="files[3]" id="files_4" /> 

और उसके बाद आप इस तरह एक नियंत्रक कार्रवाई इस्तेमाल कर सकते हैं:

+0

सहायता के लिए ग्रेट लिंक धन्यवाद यह मुझे सही दिशा निर्देश देता है –

2

यह केवल काम करेगा यदि आपकी फ़ाइल आदानों files[0], files[1], files[2], जैसे नाम अनुक्रमित था ...

आदेश में समझने के लिए कैसे मॉडल एक सूची के लिए बाध्य asp.net MVC के में काम करता है, मैं सुझाव है कि आप इस पोस्ट को पढ़ें: Model Binding to a List

आपको फ़ाइलों को प्राप्त करने के लिए मॉडल बाध्यकारी का उपयोग भी नहीं करना है। उन्हें प्राप्त करने के लिए अपनी कार्रवाई में Request.Files का उपयोग करें।

public ActionResult Create(EventsModel collection) 
{ 
    var files = Request.Files; 
    // rest of the code... 
} 
+0

मदद –

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