Actually I want to send the image and the text in the textbox to the controller...
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.Label("UserName:") <input type="text" id="txtImg" name="txtImg" /><br /><br />
@Html.Label("Upload:")<input type="file" name="image" /><br/>
<div id="Preview">
Preview
</div>
<input class="btn btn-success btnUpload" type="submit" value="upload" />
}
and I am trying to retrieve them in the controller in the below way:
public ActionResult Upload(HttpPostedFileBase image,string txtImg)
but I am not getting the textbox value..Is anything wrong withe code?
I have my sample code like this.
Controller:
public ActionResult Upload()
{
BlobStorageServices _blobstorageservice = new BlobStorageServices();
CloudBlobContainer container = _blobstorageservice.GetCloudBlobContainer();
List<string> blobs = new List<string>();
//List<BlobModel> models = BlobManager.getBlobs();
foreach (var blobItem in container.ListBlobs())
{
blobs.Add(blobItem.Uri.ToString());
}
return View(blobs);
}
[HttpPost]
public ActionResult Upload(string txtImg,HttpPostedFileBase image)
{
if (image.ContentLength > 0)
{
BlobStorageServices _blobstorageservice = new BlobStorageServices();
CloudBlobContainer container = _blobstorageservice.GetCloudBlobContainer();
CloudBlockBlob blob = container.GetBlockBlobReference(image.FileName);
//BlobManager.insertBlobUri(new BlobImage { Uri = blob.Uri.ToString() });
// string text = model.Name;
BlobManager.insertBlobUri(new BlobModel {Name=txtImg,Uri=blob.Uri.ToString()});
blob.UploadFromStream(image.InputStream);
}
return RedirectToAction("Upload");
}
View
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.Label("UserName:") <input type="text" id="txtImg" name="txtImg" /><br /><br />
@Html.Label("Upload:")<input type="file" name="image" id="upload"/><br/>
<div id="Preview">
Preview<img id="blah" src="#" alt="your image" />
</div>
<input class="btn btn-success btnUpload" type="submit" value="upload" />
}
<table style="border:1">
@foreach (var item in Model)
{
<tr style="border:1">
<td><img src="@item" alt="image" class="img-responsive" width="100" height="100" /></td>
<td><button class="btn btn-primary Delete" id="@item" onclick="deleteImage('@item');">Delete</button></td>
<td><a class="btn btn-primary Download" href="@item" target="_blank">Download Image</a></td>
<td><button class="btn btn-primary Download" onclick="updateImage('@item');">UpdateImage</button></td>
</tr>
}
I am sending the blobs directly into the view , that is the problem basically..How to use a model to insert text,bloburl,image?
Visit Uploading/Displaying Images in MVC 4
This helped me alot for uploading images
In Terms of retrieving data from the View to controller a better way is to use a ViewModel like
public class ExampleViewModel
{
public string Image {get; set;}
public string Text {get; set;}
}
and your view would look something like
@model YourProject.Models.ExampleViewModel
@using (Html.BeginForm("ExampleController","Home",FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.TextBoxFor(model => model.Text)
<input id="Image" type="file" name="Image" data-val="true" />
}
and the controller
public ActionResult ExampleController(ExampleViewModel model)
{
//Not sure how you wanted to get the image so I just put this in here
foreach (string file in Request.Files)
{
HttpPostedFileBase hpf=Request.Files[file] as HttpPostedFileBase;
if(hpf.ContentLengh==0)
continue;
string folderPath = Server.MapPath("~/yourFolderPath");
Directory.CreateDirectory(folderPath);
string savedFileName = Server.MapPath("~/yourFolderPath/" + hpf.FileName);
hpf.SaveAs(savedFileName);
model.Image="~/yourFolderPath/" + hpf.FileName;
}
//this variable is getting the text from the ViewModel
string text=model.Text;
}
Hope this helps :)