从视图模型显示图像。 MVC

时间:2010-07-04 13:01:01

标签: model-view-controller image

我的问题类似于This question但不同,我觉得它需要一个单独的线程。

所以我有以下'视图';

// A load of other calls to Model.Title, Model.Description, Model.DownloadURL 
// which work fine so no issues with actually ViewModel communication.
<fieldset>
    <div id="projectDiv">
                      // Model.ThumbnailPath is a fully qualified path to an image
                      // stored on disk, within another folder in another project.
        <img src="<%= Model.ThumbnailImagePath %>" alt="Thumbnail Image" height="100px" width="100px" />

    </div>
然而,可悲的是,我得到的只是一个概述的白框......没有图像。

我调试了应用程序并拦截了发送到ViewModel并将其粘贴到我的计算机资源管理器中的文件路径变量。我得到了我期待的图像。

我已尝试将此文件路径硬编码到源属性中,仍然是一个空白框。

此视图页面中还有许多其他属性可以完美显示,因此通过应用程序层进行的通信正在进行。

为什么这可能无法按预期运作的任何想法?

感谢您的时间。

3 个答案:

答案 0 :(得分:2)

src属性需要是URL,而不是文件路径。如果可以,请将图像放在内容/图像文件夹中,并在其中引用该URL。如果没有,即文件需要保持原样,那么考虑让控制器可以读取图像并将其作为具有正确mime类型的ContentResult返回,并使用控制器/动作/图像标识符的URL作为图像的src属性。

<img src="<%= Url.Content( "~/images/thumbnails/" + Model.ThumbnailName ) %>" ...

<img src="<%= Url.Action( "thumbnail", "image", Model.ImageID ) %>" ...

答案 1 :(得分:0)

虽然在这个框中回答答案没有任何意义,但我需要编写代码。

我真的不明白你在建议的场景tvanfosson的控制器方面会写什么。

以下是存在的内容:

图片文件夹:MySolution.Models.Entities.Images.ProjectThumbnails。在这个文件夹中存在许多bmp,它们都是根据它们所属实体的GUID命名的。

现在我在MySolution.Controllers.ProjectsController中有一个控制器,其方法如下:

 public ContentResult ProjectThumbnails(Guid Id)
 {
     ContentResult result = new ContentResult();

     Project project = projectService.GetProject(Id);
                      //This is still a fully qualified disk location path
     result.Content = project.ThumbnailImagePath; 
     return result;            
 }

然后在视图中:

<img src="<%= Url.Content(~/ProjectThumbnails/" + Model.Id) %>" />

然而,我没有通过输入“Url.Content”来获得智能感知,这很少是一件好事,而且,我运行该网站后我得到以下错误:

“编译器错误消息:CS1010:常量中的换行符”错误指向该行。

你能否澄清一下我在这里可能缺少什么?考虑到MVC制作网站的其他方面是多么容易,图像处理的难度是荒谬的。

答案 2 :(得分:0)

尝试使用...

<img src="@Url.Content("~/ProjectThumbnails/" + Model.Id)"/>