在视图中,我创建了一个img
标记。我从各个控制器传递image source
和alternate text
。 但是视图无法显示任何图片。以下是我得到的视图。
当我查看page source
时,我在那里得到了以下文字。似乎视图从控制器获取路径并正确映射它,但仍然缺少某些东西。
<fieldset>
<legend>Index</legend>
<div class="display-field">
<br /><br />
<img src="D:\abc.jpg" alt="Test Image" />
<br /><br />
<img src="D:\\abc.jpg" alt="abc" />
<br /><br />
</div>
</fieldset>
以下是我尝试过的代码。
添加了如下所示的模型(Image.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Student.Models
{
public class Image
{
public string path { get; set; }
public string altText { get; set; }
}
}
控制器如下所示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Student.Models;
namespace Student.Controllers
{
public class ImageController : Controller
{
[HttpGet]
public ActionResult Index()
{
Image img = new Image();
img.path = @"D:\abc.jpg";
img.altText = @"Test Image";
return View(img);
}
}
}
视图
@model Student.Models.Image
@{
ViewBag.Title = "Index";
}
<h2>Image Index</h2>
<fieldset>
<legend>Index</legend>
<div class="display-field">
<br /><br />
<img src="@Model.path" alt="@Model.altText" />
<br /><br />
<img src="D:\\abc.jpg" alt="abc" />
<br /><br />
</div>
</fieldset>
注意:我正在使用 Razor 视图引擎。我想用相对路径而不是虚拟路径来读它。
答案 0 :(得分:1)
Jamie Rees的回答提供了一种从磁盘读取文件的方法,但据我所知,您需要一个文件 relative 到项目中。 注意:直接从磁盘引用不是一个好主意,因为在所有环境中部署的位置可能不同。
您可能想要做的是改为使用 Url.Content 。
Image img = new Image();
img.path = Url.Content("abc.jpg");
我不确定您文件的相对位置,因此您可能需要更改它。
答案 1 :(得分:0)
如果要在磁盘上提供图像,则需要执行以下操作:
<img src="file:\\path />
因此您需要将视图更改为:
@model Student.Models.Image
@{
ViewBag.Title = "Index";
}
<h2>Image Index</h2>
<fieldset>
<legend>Index</legend>
<div class="display-field">
<br /><br />
<img src="file:\\@Model.path" alt="@Model.altText" />
<br /><br />
<img src="file:\\D:\\abc.jpg" alt="abc" />
<br /><br />
</div>
</fieldset>
答案 2 :(得分:0)
不要给出那样的硬道路。相反,请使用Url.Content()
并为其指定图像的路径。路径是项目的相对路径。