那麼上傳的圖像,顯示上傳到服務器上的圖像時,這個新手做得不對顯示在MVC 3剃鬚刀
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string ImageUrl { get; set; }
}
控制器(上傳 - 被稱爲[HttpPost]公衆的ActionResult創建):
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));
}
創建視圖:
...
@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>
}
到目前爲止,一切都很好,圖像上傳到文件夾和URL保存
現在,我想看到它的詳細信息視圖
詳細視圖:
<div class="display-foto">
<img src="@Url.Content(Server.MapPath(Model.ImageUrl))" alt="IMAGE" />
</div>
查看生成的代碼,一切似乎是正常的:
<img src="D:\Users\x\Documents\Visual Studio 2010\Projects\CMI_AD\CMI_AD\App_Data\Uploads\Fotos\_nofoto.jpg" alt="IMAGE" />
但事實是,屏幕上出現什麼,除了文本「IMAG E」。
我在做什麼錯?
P.S.我試過沒有Server.MapPath,使用相對地址「〜\ App_Data \ Uploads \ Fotos_nofoto.jpg」,結果是一樣的。
---編輯---
@ kmcc049:我想你的建議創建一個輔助
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));
}
}
在查看通話:
@Html.MyImage(Model.ImageUrl)
生成的代碼是
<img alt="[IMAGE]" src="/App_Data/Uploads/Fotos/_nofoto.jpg" />
但是res ULT是一樣的:沒有圖片:(
---解決---
顯然App_Data文件是不是一個好位置來保存上傳的文件,因爲訪問它們會產生錯誤403 - 禁止。我將文件移動到〜/ Uploads/Fotos並且它可以正常工作。
img標籤有一個硬盤的URL,而不是HTTP ... –