如何在ASP.NET Razor中显示数据库中的URL存储图像?

时间:2015-07-10 16:21:51

标签: c# asp.net asp.net-mvc database razor

涉及的数据库包括两个类型为int&的ID实体。 ImagePath类型文字。 ID保存自动递增的数字,ImagePath保存特定图像的网址。目前,我已设法使用以下代码显示数据库中找到的所有图像。

Index.cshtml

 @foreach (var item in Model)
    {@Html.DisplayFor(modelItem => item.ImagePath)
    <img src="~/Images/@Html.DisplayFor(modelItem => item.ImagePath)" />

ImageController.cs

  public class ImageController : Controller
    {
        private ImageDBContext db = new ImageDBContext();

          public ActionResult Index()
        {
            return View(db.Images.ToList());
        }

我想显示特定图像,而不是数据库中找到的所有图像。有人可以通过ID帮助我在数据库中显示特定的URL存储图像吗? (即。 ImagePath 通过.cshtml中的被叫ID显示图像)

非常感谢您的时间和帮助。谢谢。

更新

写下以下代码,以显示选择db.image = 2的ImageID表中的图像,以表示相关的网址存储图像。

ImageController.cs

  public ActionResult Index(int ImageID = 2)
        {

            return View(db.Images.Where(img => img.ID == ImageID).ToList());
        }

Index.cshtml

@foreach (var item in Model)
    {
        @Html.DisplayFor(modelItem => item.ImagePath)
         <img src="~/Images/@Html.DisplayFor(modelItem => item.ImagePath)"/>

继续我想从控制器中ImageID Index.cshtml 而不是int ImageID = 2中选择public ActionResult Index()。考虑在ImageID == 2中添加@html.DisplayFor,但不知道如何。任何想法如何从index.cshtml代码中选择ImageID来表示相关的图像?*

结束目标 将以下<img src=""/>替换为从给定的imagePath调用ID

   <a href="https://www.facebook.com/vellanevets" target="_blank"> <img src="images/social/instagram.png" /></a>
    <a href="http://instagram.com/nevetsvella/" target="_blank"> <img src="images/social/instagram.png" alt="" /></a>
    <a href="http://vimeo.com/user16587212" target="_blank"> <img src="images/social/vimeo.png" alt="" /></a>
    <a href="mailto:steven.vella93@gmail.com" target="_blank"> <img src="images/social/email.png" alt="" /></a>
        }

2 个答案:

答案 0 :(得分:0)

您可以使用LINQ返回数据库中的特定文档。假设您的数据列名为ID,您可以执行以下操作。

public class ImageController : Controller
{
    private ImageDBContext db = new ImageDBContext();

    public ActionResult Index(int intValue){

    var imagesId = db.Images.Where(img -> img.ID == intValue).ToList();

    return View(imagesId);

    }
}

这将返回Id等于intValue的所有图像。

顺便说一句,似乎你只是试图检索1个文件,如果是这样的话,你可以(而且应该)使用FirstOrDefault,如var imageWithId = db.Images.FirstOrDefault(img -> img.ID == intValue);

编辑更新+评论:

您似乎希望在索引视图中对客户端的信息采取行动。有多种方法可以做到这一点,一种方法是通过将值传回控制器来重新加载页面,控制器会将正确的模型(在您的情况下,图像)传递给您的视图。

如果您希望将值替换为模型中的值,则可以遍历模型并替换css属性。选择要替换的srcs的元素,然后使用。

var imagePath = @Html.Raw(Json.Encode(Model.ImagePath));
$(this).attr("src", imagePath);

使用JQuery使用新图像重新加载页面:

$(document).on('event', '.selector', function() {
     //Set your ID to the Id property of the element   
    var idToPass = this.id;
    clicked
    //This will simulate an HTTP request, your action will return your View with your image
window.location.replace('@Url.Action("Index", "Image")?ImageID=' + idToPass) 
});

将事件替换为您希望触发重新加载的事件。例如'click'。将选择器替换为您希望可以单击的所有元素的类。

注意:小心!在锚点上使用on.('click)可以产生有趣的结果。

您还可以使用AJAX动态地将信息传递到您的页面而无需重新加载。

答案 1 :(得分:0)

您只需在查询中过滤图片

&#13;
&#13;
public class ImageController : Controller
    {
        private ImageDBContext db = new ImageDBContext();

          public ActionResult Index()
        {
            [.. some code to decide the id ..]

            return View(db.Images
              .Where(x => x.ID = [myId]
              .ToList());
        }
&#13;
&#13;
&#13;