Joa*_*oao 9 razor asp.net-mvc-3
好吧,这个新手在显示上传到服务器的图片时出错了:
模型:
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public string ImageUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
controller(上传 - 由[HttpPost]公共ActionResult Create调用):
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));
}
Run Code Online (Sandbox Code Playgroud)
创建视图:
...
@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>
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这么好,图像上传到文件夹,并保存网址
现在,我想在详细信息视图中看到它
详细视图:
<div class="display-foto">
<img src="@Url.Content(Server.MapPath(Model.ImageUrl))" alt="IMAGE" />
</div>
Run Code Online (Sandbox Code Playgroud)
查看生成的代码,一切似乎都没问题:
<img src="D:\Users\x\Documents\Visual Studio 2010\Projects\CMI_AD\CMI_AD\App_Data\Uploads\Fotos\_nofoto.jpg" alt="IMAGE" />
Run Code Online (Sandbox Code Playgroud)
但事实是除了文字"IMAGE"之外,屏幕上没有任何内容.
我究竟做错了什么?
PS我试过没有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));
}
}
Run Code Online (Sandbox Code Playgroud)
视图中的调用:
@Html.MyImage(Model.ImageUrl)
Run Code Online (Sandbox Code Playgroud)
生成的代码是
<img alt="[IMAGE]" src="/App_Data/Uploads/Fotos/_nofoto.jpg" />
Run Code Online (Sandbox Code Playgroud)
但结果是一样的:没有图像:(
- - 解决了 - -
显然,App_Data不是保存上传文件的好位置,因为访问它们将导致错误403 - 禁止.我将文件移动到〜/ Uploads/Fotos并且它可以工作.
这不是有效的 HTTP 路径。这是您计算机上文件夹的路径。
尝试使用该UrlHelper.GenerateContentUrl()方法
http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.generatecontenturl.aspx
| 归档时间: |
|
| 查看次数: |
19372 次 |
| 最近记录: |