获取视图以使用ASP.Net MVC 4呈现数据库中的图像C#

问题描述:

我一直拉着我整天试图弄清楚的那些小毛发。获取视图以使用ASP.Net MVC 4呈现数据库中的图像C#

我有一个个人的网络应用程序,我一直在遵循各种教程放在一起,它已经相当漂亮。我遇到的问题是,当我点击一个链接到强类型视图的图像时,使用基本html显示视图条例显示,但是我无法从数据库中获取任何信息以使用@ Model.CardID显示在页面上。

这是关于应用程序的一些信息。这基本上是来自交易卡游戏的牌的索引。主页面完美地工作,我可以看到从数据库中提取的所有信息,包括图像。自从我链接了这些图像之后,点击图像将从数据库中提取标识并将其附加到网址。如果不采取任何措施,只会在浏览器页面中自行显示图片。这不是我想要的。

我希望能够点击图像并使用从数据库中解析出的数据打开一个与系统生成的URL关联的视图,对于我来说我无法想象它。

以下是控制器的动作,模型和视图信息。为控制器

使用陈述:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Mvc; 
    using MTG_Card_App.Domain.Abstract; 
    using MTG_Card_App.Domain.Entities; 
    using MTG_Card_App.WebUI.Models; 

操作中,所述控制器:CardController.cs

public FileContentResult GetImage(int cardId) 
    { 
     Card card = repository.Cards.FirstOrDefault(p => p.CardID == cardId); 
    if (card != null) 
    { 
     return File(card.ImageData, card.ImageMimeType); 
    } 
    else 
    { 
     return null; 
    } 
} 

    public ViewResult FullImage(int cardId) 
    { 
     Card card = repository.Cards.FirstOrDefault(p => p.CardID == cardId); 
    { 
     return View(cardId); 
    } ...(other closing brackets removed) 

模型类:Card.cs

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.ComponentModel.DataAnnotations; 
    using System.Web.Mvc; 

    namespace MTG_Card_App.Domain.Entities 
    { 
    public class Card 
    { 
     [HiddenInput(DisplayValue = false)] 
     public int CardID { get; set; } 

     [Required(ErrorMessage = "Please enter a Card Name")] 
     public string Name { get; set; } 

     [DataType(DataType.MultilineText)] 
     public string CardText { get; set; } 

     [Required(ErrorMessage = "Please enter a Card Type")] 
     public string Type { get; set; } 

     [Required(ErrorMessage = "Please enter Card color")] 
     public string Color { get; set; } 

     [Required(ErrorMessage = "Please enter only one Card Set")] 
     public string Set { get; set; } 

     public byte[] ImageData { get; set; } 

     [HiddenInput(DisplayValue = false)] 
     public string ImageMimeType { get; set; } 
    } 
} 

摘要页(这是卡片的索引)CardSummary.cshtml

@model MTG_Card_App.Domain.Entities.Card 

    <div class="item"> 

     @if (Model.ImageData != null) 
     { 
      <div> 
       <a href="@Url.Action("FullImage", "Card", new { Model.CardID })"> 
       <img width="105" height="150" src="@Url.Action("GetImage", "Card", 
       new { Model.CardID })" /> 
       </a> 
      </div> 

     } 

     <h2>@Model.Name</h2> 
     <p>@Model.CardText</p> 
     <h3>@Model.Type</h3> 
     <h3>@Model.Color</h3> 
     <p>@Model.Set</p> 

    </div> 

@ URL.Action助手在此页面上正常工作,并正确显示数据库中的图像。当鼠标悬停在图像上时,我得到的URL显示为本地主机:*****/Card/FullImage?CardID = 1,以此类推CardSumnmary页面中的每个图像。当我点击图像时,我可以获取FullImage视图来加载,但无法获取图像生成。

下面是FullImage.cshtml

@model MTG_Card_App.Domain.Entities.Card 

    @{ 
     ViewBag.Title = "FullImage"; 
    } 
    <h2>Full Image</h2> 
    <img src="@Url.Action("GetImage", "Card", new { @Model.CardID })" /> 

我刚刚更新了所有这些信息,并跑了应用程序,收到我没有得到一个新的错误消息的代码:

传入字典的模型项目类型为'System.Int32', ,但该字典需要 'MTG_Card_App.Domain.Entities.Card'类型的模型项。

任何援助对此将不胜感激。预先感谢您提供的任何答案或信息,这些答案或信息可能会指向正确的方向。

请让我知道是否有任何其他文件,你可能需要查看。

+0

您所看到的错误消息是因为你传递'返回查看(CardId中)'但是你FullImage视图声明它需要一个'@model Card'。 – Jasen

+0

谢谢你指出。它修复了错误,现在它工作在100%。如果你想把它作为答案,我会更愿意接受它。 – amfilipiak

您的问题来源于此代码:

public ViewResult FullImage(int cardId) 
{ 
    Card card = repository.Cards.FirstOrDefault(p => p.CardID == cardId); 
{ 
    return View(cardId); // throws InvalidOperationException 
} ...(other closing brackets removed) 

返回从控制器Card模型类,你的看法相反的,你试图返回cardId具有int类型,因此抛出InvalidOperationException。改变返回模型card并能正常工作:

public ViewResult FullImage(int cardId) 
{ 
    Card card = repository.Cards.FirstOrDefault(p => p.CardID == cardId); 
{ 
    return View(card); // returning model class, not a passed property id 
} ...(other closing brackets removed)