2013-05-20 8 views
8

मैं यह does not मेरी प्रपत्रएमवीसी 4 @ एचटीएमएल कैसे बनाएं। टेक्स्टबॉक्स प्रकार = "फाइल"?

<input type="file" class="input-file" /> 

मैं मॉडल बनाने पर निम्न क्षेत्र जोड़ सकते हैं और इस क्षेत्र (पिछले क्षेत्र)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace CorePartners_Site2.Models 
{ 
    public class FeedbackForm 
    { 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
    public string Company { get; set; } 
    public string AdditionalInformation { get; set; } 
    public HttpPostedFileBase ProjectInformation { get; set; } 
    } 
} 

का वर्णन और

@Html.TextBox(null, null, new { type="file", @class="input-file" }) 

बनाने के लिए, लेकिन जरूरत है काम, मुझे कुछ अपवाद मिलता है। क्या गलत है?

+1

क्या त्रुटि का उपयोग कर हल किया? और आप नाम विशेषता के लिए शून्य मान क्यों परिभाषित करते हैं? मेरा मतलब है इस तरह का उपयोग करें: '@ एचटीएमएल। टेक्स्टबॉक्स ("प्रोजेक्ट इन्फॉर्मेशन", नल, नई {टाइप = "फाइल", @ क्लास = "इनपुट-फाइल"}) ' –

+0

हाँ, अब मैं समझ गया, मैं' @ एचटीएमएल बनाउंगा।टेक्स्टबॉक्स ("फ़ाइल", शून्य, नई {प्रकार = "फ़ाइल", @ वर्ग = "इनपुट-फ़ाइल"}) 'और मुझे 'इनपुट इनपुट =" इनपुट-फ़ाइल "आईडी =" फ़ाइल "नाम =" फ़ाइल "मिलती है टाइप = "फाइल" वैल्यू = "">> लेकिन मुझे आईडी की आवश्यकता नहीं है। आईडी के बिना फ़ील्ड कैसे बनाएं? – Heidel

+0

लेकिन यदि आप आईडी का उपयोग नहीं करते हैं तो आप मॉडल को फ़ाइल में बाध्य नहीं कर सकते हैं। और एक और सुझाव, यदि आप आईडी के लिए 'ProjectInformation' का उपयोग करते हैं, तो एमवीसी स्वचालित रूप से आपके मॉडल पर फ़ाइल को बाध्य करेगा। –

उत्तर

14

मॉडल

public class FeedbackForm 
{ 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
    public string Company { get; set; } 
    public string AdditionalInformation { get; set; } 
    public HttpPostedFileBase ProjectInformation { get; set; } 
} 

देखें

@model FeedbackForm 

@Html.TextBox("Name") 
@Html.TextBox("Email") 
... 
@Html.TextBox("ProjectInformation", null, new { type="file", @class="input-file" }) 

// submit button 

मेरे सिफारिश दृश्य (दृढ़ता से - आपके द्वारा लिखा गया)

@model FeedbackForm 

@Html.TextBoxFor(model=>model.Name) 
@Html.TextBoxFor(model=>model.Email) 
... 
@Html.TextBoxFor(model=>model.ProjectInformation, null, new { type="file", @class="input-file" }) 

// submit button 

नियंत्रक

[HttpPost] 
public ActionResult FeedbackForm(FeedbackForm model) 
{ 
    // this is your uploaded file 
    var file = model.ProjectInformation; 
    ... 

    return View(); 
} 

एमवीसी नाम बातचीत का उपयोग कर रहा है, इसलिए यदि आपके मॉडल के साथ टेक्स्टबॉक्स के लिए समान चर नामों का उपयोग करें, तो एमवीसी आपके इनपुट को आपके मॉडल में बाध्य करेगा।

+0

धन्यवाद! अगर मेरा विचार दृढ़ता से टाइप नहीं किया गया था, तो मुझे फिर से दृश्य बनाना होगा? – Heidel

+1

नहीं, बस मददगार बदलें। अपने एचटीएमएल हेल्पर्स में "-फोर" प्रत्यय जोड़ें, और लैम्ब्डा एक्सप्र का उपयोग करें। नाम निर्दिष्ट करने के लिए (x => x.someProp) की तरह। –

+1

और बेशक, शीर्ष पर '@model FeedbackForm' जोड़ें। – anaximander

0

आपको फ़ील्ड का नाम निर्दिष्ट करने की आवश्यकता है। यदि आप कोई नाम नहीं चाहते हैं, न ही कोई मान, तो फ़ील्ड को अपने फॉर्म में शामिल करना बेहतर है।

यदि कोई इसके बारे में गतिशील नहीं है, तो एक सहायक का उपयोग करना समझ में नहीं आता है।

1

सीधे आपके विचार में इनपुट टैग का उपयोग करने में कुछ भी गलत नहीं है। आपको एक सहायक का उपयोग करने की आवश्यकता नहीं है।

<input type="file" class="input-file" /> 

बस सुनिश्चित करें कि यह आपके BeginForm घोषणा ब्लॉक में है।

3

आप नीचे दिए गए वाक्य रचना

@Html.TextBoxFor(model=>model.Email, new { @type="file", @class="input-file" }) 
+2

'@' '@ type =" file "में' @ 'अनावश्यक है। – Sheridan

3

मुझे लगता है कि क्योंकि आप अपने प्रपत्र टैग में enctype निर्दिष्ट नहीं किया है आप एक अशक्त हो रही है का उपयोग कर सकते हैं।

@using (Html.BeginForm ("ActionMethodName", "नियंत्रक", FormMethod.Post, नए {enctype = "बहुखण्डीय/फार्म-डेटा"})) { }

एक काम कर उदाहरण हमेशा मदद ।

जाएँ http://www.mindstick.com/Articles/cf1e1dd9-fdba-4617-94f0-407223574447/?Upload%20File%20in%20Asp.Net%20Mvc%204

-1
@using (Html.BeginForm("Action_Name", "Controller_Name",FormMethod.Post)) 
    { 
     @Html.TextBoxFor(m => m.Email, new {@class = "text_field"}) 
     @Html.ValidationMessageFor(m => m.Email) 
    } 
+0

यह सवाल का उत्तर कैसे देता है? –

1

मैं इस समस्या enctype="multipart/form-data"

@using (Html.BeginForm("SalvarEvidencia", "Evidencia", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    ... 
} 
संबंधित मुद्दे