从数据库中获取视图以呈现图像.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"。
对此的任何帮助都将非常感激。提前感谢您的任何答案或信息,可以为我指出正确的方向。
您的问题来自以下代码:
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)