C# Mvc发行候选版“;文件";行动结果
K。。。我显然做错了什么。我有一个简单的页面,上面有一个文件输入控件和一个提交按钮。我正在试用Mvc RC发布的新“文件”ActionResult 我只想在单击submit按钮时将所选文件上载到数据库。这一切都很好 然后,在页面刷新后,我想要一个图像来显示上传的结果图像。问题是图像没有呈现。。。我得到了破碎的图像 这是获取文件并将其发送回视图的部分C# Mvc发行候选版“;文件";行动结果,c#,asp.net-mvc,C#,Asp.net Mvc,K。。。我显然做错了什么。我有一个简单的页面,上面有一个文件输入控件和一个提交按钮。我正在试用Mvc RC发布的新“文件”ActionResult 我只想在单击submit按钮时将所选文件上载到数据库。这一切都很好 然后,在页面刷新后,我想要一个图像来显示上传的结果图像。问题是图像没有呈现。。。我得到了破碎的图像 这是获取文件并将其发送回视图的部分 var a = Helper.Service.GetAttachmentById(id, MembershipProvider.Se
var a = Helper.Service.GetAttachmentById(id, MembershipProvider.SecurityTicket);
if (a == null)
{
return View(new ImagePlaceHolderViewData(new { Id = id }));
}
return View(new ImagePlaceHolderViewData(new { Id = a.Id, Image = a, FileContent = File(a.Data, a.ContentType) }));
然后在视图中我有一个像这样的图像标签
<img src="<%=Model.FileContent.FileContents %>" />
“/>
我也试过
<img src="<%=Model.FileContent%>" />
“/>
想法….我认为这很简单:img标签的src属性需要一个URL。您在这里所做的只是将FileStream对象放入其中(它隐式地调用该对象上的ToString方法)。生成的html可能如下所示:
<img src="FileStream#1" />
<img src="/Images/View/1" />
你查过你的html源代码了吗
您可能应该做的是提供一个返回数据的方法,并将到该数据的路由传递给视图。生成的html“应该”如下所示:
<img src="FileStream#1" />
<img src="/Images/View/1" />
因此,您必须执行以下步骤:
- 在控制器上创建一个返回FileContentResult的方法
- 将图像ID传递给视图
- 使用Url.RouteUrl生成一个Url,您可以将其放入img标记中,该标记指向返回图像数据的方法
<img src="<%=Model.FileContent.FileContents %>" />
这指向以下(非常简单且不完整)示例控制器:
public class ImageController : Controller
{
public ActionResult Result(int resultID)
{
// Do stuff here...
return File(..);
}
}
请注意,我为操作选择的名称很可能不太好,但它作为一个示例起到了作用。希望这有帮助。还有另一个解决方案:
“/>
它在某些浏览器中工作,在某些浏览器中不工作(当然是IE)。但稳定的解决方案是Thomas J提到的。在HtmlHelper上不存在任何称为RouteUrl的(扩展)方法。该方法是UrlHelper(Url.RouteUrl)的一部分我更新了我的帖子。你会注意到,我现在可以让图片出现在第一次上传时,但是,如果我去上传第二张图片,它应该会替换第一张图片,但是,它不会。图片不会刷新到新的图片,但是,我可以在db站点上看到记录已经更新/替换。想法…?可能是浏览器的缓存仍然保存着记录旧映像。清除缓存并检查问题是否仍然存在。