【问题标题】:Pass Image from Database to View, Null Reference Exception Error将图像从数据库传递到视图,空引用异常错误
【发布时间】:2017-06-07 13:14:20
【问题描述】:

用户点击搜索按钮后,我想显示一个包含信息字段的列表,除了图像之外,一切都很好。我有一个 ActionResult 方法,它从视图中获取一个 Id 并在点击事件时向用户显示图像。

到目前为止的问题是,在控制器中,即使“item.Image.ImageId”具有 Id 值,左侧部分(我发送到视图的模型)也会引发 Null 引用异常,因此我无法传递 Image Id使用 'href = "~/Process/..."' 到视图

屏幕截图错误:Object reference not set to an instance of an object.

我的控制器:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Index(SearchModel FormModel)
    {
        int districtNo = Convert.ToInt32(FormModel.DistrictNo);
        List<SearchModel> ResultsList = new List<SearchModel>();

        IQueryable<LetterInfo> DbQueries = // Get result from db

        foreach (var item in DbQueries.ToList())
        {
            FormModel.FirstName = item.FirstName;
            FormModel.LastName = item.LastName;
            ...
            FormModel.Image.ImageId = item.Image.ImageId; 
// FromModel.Image.ImageId - null reference exception
            ResultsList.Add(FormModel);

        }
        ViewBag.ResultsToView = ResultsList;
    }
        return View(new SearchModel());
    }

SearchModel 类:

public class SearchModel
{
    .
    .
    .
    public Image Image { get; set; }
}

LetterInfo 类:

 public class LetterInfo
 {   
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int LetterId { get; set; }
    .
    .
    .
    public virtual Image Image { get; set; }
 }   

返回图片文件的方法:

    public ActionResult ViewImage(int Id)
    {
        var img = db.Images.First(a => a.ImageId == Id);
        var stream = new MemoryStream(img.FileContents);

        var lname = "letter" + Path.GetExtension(img.FileName)?.ToLower();

        Response.AppendHeader("Content-Disposition", $"inline; filename={lname}");
        return File(stream, Helpers.GetMimeType(img.FileName));
    }

查看:

@model SearchModel

@section scripts{
  <script type="text/javascript">
    var win;

    $('#openImage').click(function (event) {
        event.preventDefault();
        win = window.open(this.href, 'child', 'resizable=1');
        return false;
    });
  </script>
}
...
@foreach (var item in ModelList){
  <li></li> 
  ...
  <li class="list-group-item">
    <a href="~/Process/ViewImage/@item.Image.ImageId" id="openImage"> 
<!-- On click open image file -->

      <span>Click to see image</span>
    </a>
  </li>
}

【问题讨论】:

  • 您正在尝试将属性分配给空的 Image 对象。试试这个实际操作索引:FormModel.Image = item.Image;
  • 不只是FormModel.Image为空吗?为什么不这样做FormModel.ImageId = item.Image?.IdImage ?? -1 并在ViewImage 方法中检查-1 并返回null。 (或将ImageId 的类型更改为可为空并检查是否为空)

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity


【解决方案1】:

FormModel.Image 或 item.Image 为空。 NullReferenceException 是运行时错误,当您访问特定对象 应该 根据其类型具有但实际上没有的成员时发生,因为实例为 null,而 null 没有例如ImageId 之类的属性。

【讨论】:

  • 解决方案是传递对象:FormModel.Image = item.Image;我需要传递对象而不是属性。谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
相关资源
最近更新 更多