在MVC中图像路径相对时,无法使用<img/>标记查看图像:C#

时间:2015-09-21 16:25:52

标签: c# asp.net-mvc image razor razorengine

在视图中,我创建了一个img标记。我从各个控制器传递image sourcealternate text但是视图无法显示任何图片。以下是我得到的视图。

enter image description here

当我查看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 视图引擎。我想用相对路径而不是虚拟路径来读它。

3 个答案:

答案 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()并为其指定图像的路径。路径是项目的相对路径。