2013-02-23 44 views
14

मॉडल करने के लिए बाध्यकारी नहीं HttpPostedFileBase मेरी ViewModelयहाँ

public class FaultTypeViewModel 
{ 
    [HiddenInput(DisplayValue = false)] 
    public int TypeID { get; set; } 

    [Required(ErrorMessageResourceType = typeof(AdministrationStrings), ErrorMessageResourceName = "FaultTypeNameRequired")] 
    [Display(ResourceType = typeof(AdministrationStrings), Name = "FaultTypeName")] 
    public string TypeName { get; set; } 

    [Display(ResourceType = typeof(AdministrationStrings), Name = "FaultTypeDescription")] 
    [DataType(DataType.MultilineText)] 
    public string TypeDescription { get; set; } 

    [Display(ResourceType = typeof(AdministrationStrings), Name = "FaultTypeImageFile")] 
    public HttpPostedFileBase TypeImageFile { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public string TypeImageURL { get; set; } 
} 

सूचना मैं एक "TypeImageFile" HttpPostedFileBase मैं उम्मीद होती है कि मॉडल बांधने की मशीन मॉडल के लिए फार्म से है कि संपत्ति बॉन्ड होगा नियंत्रक बू के पास रहता है मैं बस शून्य प्राप्त करना जारी रखता हूं।

यहाँ देखें में प्रासंगिक कोड है:

@using (Html.BeginForm("AddFaultType","Administration", FormMethod.Post)) 
{ 

    <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 
      ×</button> 
     <h3 id="myModalLabel">@SharedStrings.Add @SharedStrings.FaultType</h3> 
    </div> 
    <div class="modal-body"> 
     @Html.ValidationSummary(true) 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.TypeName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.TypeName) 
      @Html.ValidationMessageFor(model => model.TypeName) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.TypeDescription) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.TypeDescription) 
      @Html.ValidationMessageFor(model => model.TypeDescription) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.TypeImageFile) 
     </div> 
     <div class="editor-field"> 
      <input type="file" name="TypeImageFile" id="TypeImageFile" /> 
     </div> 
    </div> 

    <div class="modal-footer"> 
     <input type="submit" value="@SharedStrings.Add" class="btn btn-primary" /> 
     @Html.ActionLink(SharedStrings.Cancel, "Index", "Administration", null, new { Class = "btn", data_dismiss = "modal", aria_hidden = "true" }) 
    </div> 
} 

और यहाँ नियंत्रक है:

 [HttpPost] 
     public ActionResult AddFaultType(FaultTypeViewModel i_FaultToAdd) 
     { 
      var fileName = Path.GetFileName(i_FaultToAdd.TypeImageFile.FileName); 
      var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); 
      i_FaultToAdd.TypeImageFile.SaveAs(path); 

      return RedirectToAction("Index"); 
     } 
+0

खुश purim। कृपया अपने फॉर्म में अपना फॉर्म शामिल करें। –

+1

@ डेवए धन्यवाद डेव! :) ... आपके लिए भी शुभकामनाएं, मैंने फॉर्म सहित पूर्ण दृश्य कोड जोड़ा है। – Mortalus

उत्तर

37

सुनिश्चित करें कि आप अपने फार्म पर multipart/form-data अपने फ़ॉर्म में enctype विशेषता निर्धारित किया है यदि आप फ़ाइलों को अपलोड करने में सक्षम होना चाहते हैं:

@using (Html.BeginForm("AddFaultType", "Administration", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    ... 
} 
+0

जो इसे करना चाहिए –

+3

पहले से ही यह ठीक से सेट किया गया था। अभी भी शून्य हो रही है। – Trevor

+0

क्या यह 'Ajax.BeginForm' के साथ किया जा सकता है? – Tyler