In my model i have a HttpPostedFileBase property as File. In the view I have a textbox "A" and a button "B". I also have a hidden input type="file" id ="file "on my page. On B click i trigger the #file.click in my javascript. The selected file should then bind to the model property and the file name should be displayed on the textbox. I am unable to do this. Any help? I hope the question is clear, if not please tell me so that i can elaborate further.
Any help?
Edit 1:
Model:
public class FileUploadModel
{
public HttpPostedFileBase File { get; set; }
public string FileName {get;set;}
}
View:
<script type="text/javascript">
$(document).ready(function () {
$("#Browse").click(function () {
$("#fileIputType").trigger('click');
//now the file select dialog box opens up
// The user selects a file
// The file should get associated with the model property in this view
// the textbox should be assigned the filename
});
});
</script>
@Html.TextBox("fileTextBox", Model.FileName, new { id = "fileTextBox" })
<input type="button" id="Browse" name="Browse" value="Browse" />
<input type="file" id="fileInputType" style="visibility:hidden"/>
@Html.Hidden("ModelType", Model.GetType())
//How can i bind the selected file to the model property ( public HttpPostedFileBase File )
Assign File
to the name property of your file input
<input type="file" name="File" id="fileInputType" style="visibility:hidden"/>
And this would bind to HttpPostedFileBase file
parameter in your action method when you submit the form.
Edit:
Remeber to set your form's entype
to multipart/form-data
@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new {enctype="multipart/form-data" })
You can't set the input type='file'
elements value
property in javascript programatically.
Why dont you show the File name as a label text? Have a FileName
property in your model(viewmodel) class
@model MyViewModel
{
<label>@Model.FileName</label>
}
EDIT:
Based on your code
public class FileUploadModel
{
public HttpPostedFileBase File { get; set; }
public string FileName {get;set;}
}
In view
@Html.TextBoxFor(m => m.File, new { type = "file" })
In Controller
using (MemoryStream memoryStream = new MemoryStream())
{
model.File.InputStream.CopyTo(memoryStream);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.