Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC HttpPostedFileBase always null

I have this controller and what I am trying to do is to send an image to the controller as a [byte], this is my controller:

[HttpPost]
public ActionResult AddEquipment(Product product, HttpPostedFileBase image) 
 {

            if (image != null) 
            {
                product.ImageMimeType = image.ContentType;
                product.ImageData = new byte[image.ContentLength];
                image.InputStream.Read(product.ImageData, 0, image.ContentLength);
            }

            _db.Products.Add(product);
            _db.SaveChanges();

            return View();
 }

and on my view:

@using (Html.BeginForm("AddEquipment", "Equipment", FormMethod.Post)) {

    <fieldset>
        <legend>Product</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Description)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Description)
            @Html.ValidationMessageFor(model => model.Description)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Price)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Price)
            @Html.ValidationMessageFor(model => model.Price)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Category)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Category)
            @Html.ValidationMessageFor(model => model.Category)
        </div>

        <div>
        <div>IMAGE</div>
        <input type="file" name="image" />

        </div>


        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

but the problem is that on my controller the value for image is alway null, I cant seem to get any information on the HttpPostedFileBase

like image 368
Riquelmy Melara Avatar asked Feb 24 '14 20:02

Riquelmy Melara


People also ask

What is HttpPostedFileBase in MVC?

The HttpPostedFileBase class is an abstract class that contains the same members as the HttpPostedFile class. The HttpPostedFileBase class lets you create derived classes that are like the HttpPostedFile class, but that you can customize and that work outside the ASP.NET pipeline.

What is the namespace for HttpPostedFileBase?

Web. Mvc namespace is the class which binds a model to a posted file. So, the parameter (which is type of HttpPostedFileBase) of the Index_post method receives the posted file.


1 Answers

You need to add the encType with multipart/form-data.

@using (Html.BeginForm("AddEquipment", "Equipment", FormMethod.Post, new {enctype = "multipart/form-data" })) {

You can always add it to your model too as follows, providing it is a ViewModel:

public class Product 
{
    public Product()
    {
        Files = new List<HttpPostedFileBase>();
    }

    public List<HttpPostedFileBase> Files { get; set; }
    // Rest of model details
}

You can the retrieve the files by removing the un-needed parameter i.e.

[HttpPost]
public ActionResult AddEquipment(Product product) 
 {
    var file = model.Files[0];
    ...
 }
like image 199
hutchonoid Avatar answered Oct 23 '22 16:10

hutchonoid