Vâng, newbie này đang làm gì đó sai khi hiển thị hình ảnh được tải lên máy chủ:Hiển thị một hình ảnh tải lên trong MVC 3 Razor
mô hình:
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string ImageUrl { get; set; }
}
điều khiển (tải lên - gọi bởi các [HttpPost] public ActionResult tạo):
public void Upload(Person person)
{
var image = WebImage.GetImageFromRequest();
var filename = Path.GetFileName(image.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Uploads/Fotos"), filename);
image.Save(path);
person.ImageUrl = Url.Content(Path.Combine("~/App_Data/Uploads/Fotos", filename));
}
tạo view:
...
@using (Html.BeginForm("Create", "Person", FormMethod.Post, new { @encType = "multipart/form-data" }))
{
...
@FileUpload.GetHtml(initialNumberOfFiles: 1, allowMoreFilesToBeAdded: false, includeFormTag: false, uploadText: "image")
...
<div>
<input type="submit" value="Create" /> |
@Html.ActionLink("Back", "Index")
</div>
}
Cho đến nay, như vậy tốt, hình ảnh được tải lên thư mục và url được lưu
Bây giờ, tôi muốn nhìn thấy nó trong chi tiết
chi tiết xem:
<div class="display-foto">
<img src="@Url.Content(Server.MapPath(Model.ImageUrl))" alt="IMAGE" />
</div>
Xem mã được tạo, mọi thứ có vẻ không sao:
<img src="D:\Users\x\Documents\Visual Studio 2010\Projects\CMI_AD\CMI_AD\App_Data\Uploads\Fotos\_nofoto.jpg" alt="IMAGE" />
Nhưng thực tế là không có gì xuất hiện trên màn hình ngoại trừ văn bản "IMAG E ".
Tôi đang làm gì sai?
P.S. Tôi đã thử mà không có Server.MapPath, sử dụng địa chỉ tương đối "~ \ App_Data \ Uploads \ Fotos_nofoto.jpg" và kết quả là như nhau.
--- EDIT ---
@ kmcc049: Tôi đã cố gắng đề nghị của bạn tạo ra một helper
public static class MyHelpers
{
public static IHtmlString MyImage(this HtmlHelper htmlHelper, string url)
{
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var img = new TagBuilder("img");
img.Attributes["alt"] = "[IMAGE]";
img.Attributes["src"] = UrlHelper.GenerateContentUrl(url, htmlHelper.ViewContext.HttpContext);
return MvcHtmlString.Create(img.ToString(TagRenderMode.SelfClosing));
}
}
cuộc gọi trong giao diện:
@Html.MyImage(Model.ImageUrl)
mã được tạo là
<img alt="[IMAGE]" src="/App_Data/Uploads/Fotos/_nofoto.jpg" />
nhưng lại là ult là như nhau: không có hình ảnh :(
--- SOLVED ---
Rõ ràng App_Data không phải là một vị trí tốt để lưu các tập tin được tải lên bởi vì truy cập vào chúng sẽ dẫn đến một Lỗi 403 - Forbidden. Tôi di chuyển các tập tin đến ~/Uploads/Fotos và nó hoạt động.
thẻ img có một url đĩa cứng, và không phải là một http ... –