从数据库中获取视图以呈现图像.Net MVC 4 c#

本文关键字:Net 图像 MVC 数据库 获取 视图 | 更新日期: 2023-09-27 18:18:33

我一整天都在揪我落下的头发,想弄清楚这件事。

我有一个个人的web应用程序,我一直把下面的各种教程放在一起,它已经走得相当好。我遇到的问题是,当我点击链接到一个强类型视图的视图账单显示与基本html的图像,但我不能从数据库拉出任何信息,使用@Model.CardID显示在页面上。

这里是一些关于应用程序的信息。它基本上是一个交易卡牌游戏的卡索引。主页工作完美,我可以看到所有的信息被从数据库包括图像拉。我已经链接了图像,并在一个点上点击图像将从数据库中拉的身份,并将其附加到url。在没有任何操作的情况下,这将在浏览器页面中显示图像本身。这不是我想要的。

我希望能够点击图像,并使用从数据库中解析的数据打开一个视图,该视图与系统生成的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显示为localhost:*****/Card/fulllimage ?CardID=1,依此类推。当我点击图片的时候,我可以让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"。

对此的任何帮助都将非常感激。提前感谢您的任何答案或信息,可以为我指出正确的方向。

从数据库中获取视图以呈现图像.Net MVC 4 c#

请告诉我是否还有其他文件需要查看。

您的问题来自以下代码:

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

而不是从控制器返回Card模型类到您的视图,您试图返回具有int类型的cardId,因此抛出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)