2012-05-25 17 views
6

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

[HttpPost] 
public ActionResult Upload(IEnumerable<HttpPostedFileBase> fileUpload) 

हालांकि, मैं नहीं कर सकते किसी भी उदाहरण मैं कहाँ अपलोड एकाधिक फ़ाइलों को हो सकता है, जहां मेरे ActionResult हस्ताक्षर कुछ इस तरह है:

[HttpPost] 
public ActionResult Upload(MyViewModel vm) 

कारण यह है कि मैं इस व्यूमोडेल को पोस्ट करना चाहता हूं क्योंकि मुझे फॉर्मकॉलेक्शन वैरिएबल का उपयोग करने से इसकी क्लीनर लगता है और क्योंकि मैं प्रत्येक फाइल को अपलोड करना चाहता हूं और डेटा को इसके संबंधित टेक्स्टबॉक्स के साथ जोड़कर एक साथ समूहीकृत किया जाना चाहिए। List<FileUploadPacket> जो पी होगा ViewModel

अद्यतन

मेरे देखें मॉडल नीचे की कला:

public class EmployeeVM 
{ 

    public int EmployeeID {get ;set;} 
    public string EmpName {get ;set;} 
    //Other properties 

    public List<FileUploadPacket> FileUploadPackets { get; set; } 
} 

FileUploadPacket वर्ग किस प्रकार HttpPostedFileBase मेरे विचार की

public class FileUploadPacket 
{ 

    public int FileID {get ;set;} 
    public string UserEnteredDesc {get ;set;} 
    //some more other properties 

    public HttpPostedFileBase UpFile { get; set; } 
} 

कोड स्निपेट की संपत्ति है।

के रूप में एएसपीएक्स

जैसा कि आप देख सकते हैं, मेरे पास अपनी खुद की कक्षा में अपलोड की जा रही एक फ़ाइल के लिए विशिष्ट सभी अन्य गुण हैं। ताकि मेरे रूप में एक कर्मचारी अपना नाम दर्ज कर सके और अपनी फाइलें अपलोड कर सके और प्रत्येक फ़ाइल के लिए कुछ विवरण और अन्य विवरण प्रदान कर सके। यदि मैं संपत्ति को EmployeeVM कक्षा में स्थानांतरित करता हूं तो मुझे सभी फ़ाइलों को एक सरणी में अलग से एकत्र करना होगा और मैन्युअल रूप से फ़ाइल को इसके विवरण में मैप करना होगा। FileUploadPacket कक्षा में संपत्ति रखने के लिए ऐसा कोई तरीका नहीं है?

मैं एएसपीएक्स व्यू इंजन का उपयोग कर रहा हूं।

कृपया मदद करें। आपके समय के लिए धन्यवाद ...

उत्तर

2

यह ठीक करने के लिए आपके नाम और आईडी अपलोड नियंत्रण को बदल रहा है।

<%: Html.TextBoxFor(model => model.EmpName, new { maxLength = 50 })%> 

Upload your files here: 
<input type="file" id="FileUploadPackets[0].UpFile" name="FileUploadPackets[0].UpFile" value="ActionHandlerForForm" /> 
<%: Html.TextBoxFor(model => model.FileUploadPackets[0].UserEnteredDesc)%> 

<input type="file" id="FileUploadPackets[1].UpFile" name="FileUploadPackets[1].UpFile" value="ActionHandlerForForm" /> 
<%: Html.TextBoxFor(model => model.FileUploadPackets[1].UserEnteredDesc)%> 

यह मेरे लिए काम किया !! उम्मीद है कि यह किसी और की मदद करता है ..

4

GetHtml सहायक एमवीसी ढांचे का हिस्सा नहीं है, तो आपको उस सहायक के साथ तीसरे पक्ष की लाइब्रेरी की तलाश करनी चाहिए।

व्यूमोडेल का हिस्सा है जो फ़ाइल अपलोड करना सरल है। मूल रूप से यह

परिभाषित दृश्य मॉडल

public class MyViewModel 
{ 
    public HttpPostedFileBase MyFile { get; set; } 
} 

Views/Shared/EditorTemplates अंदर की तरह हो जाता है,, MyViewModel.cshtml

<input type="file" id="MyFile" name="MyFile" /> 

और दृश्य बनाने कार्रवाई

@model MyViewModel 

@using(Html.BeginForm("Upload", "MyController", FormMethod.Post, new { enctype="multipart/form-data"}) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="Upload" /> 
} 

आवश्यक विशेषता अपलोड करने के लिए इसी के लिए महत्वपूर्ण है फाइल अपलोड करो।

और यह एक बार फॉर्म सबमिट होने के बाद, आपको [HttpPost] एक्शन, vm.MyFile के अंदर अपलोड की गई फ़ाइल देखना चाहिए।

+1

'enctype =" multipart/form-data "'भाग ने मेरे लिए इसे हल किया। –

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