File input filters in mvc4 or html 5?

asp.net, asp.net-mvc, asp.net-mvc-4, file-upload, html

Solution

You simply replace your accept(s) with the full mime type in your case application/pdf rather than the wildcard *.

@Html.TextBoxFor(m => m.Attachment, new { @class = "form-control", type = "file", accept="application/pdf" })

You can separated multiple mime type with a comma, if you wanted pdf and word in a single upload control you would do so like this:

@Html.TextBoxFor(m => m.Attachment, new { @class = "form-control", type = "file", accept="application/pdf, application/msword" })

Update

If you store your accepted mime types in a collection (hard-coded here for demo purposes)

private List<string> mimeTypes = new List<string> {
        "application/pdf", 
        "application/msword"
    };

You can add the accepted mime type to your model, return them like this:

model.MimeTypes = string.Join(", ", mimeTypes);

Render them like this:

@Html.TextBoxFor(m => m.Attachment, new { @class = "form-control", type = "file", accept=Model.MimeTypes })

Problem

I know that we can use filter types in HTML 5 with accept attribute `<input accept="audio/*|video/*|image/*|MIME_type">` But these all things are showing "All Files" options too. I want strict to certain file types in the like "*.pdf, All office word types, images, excel". How can we do that? My Code like ``` @Html.TextBoxFor(m => m.Attachment, new { @class = "form-control", type = "file" }) ```

Original source