0

I get error when i click on edit button it show error in img src(null reference)

This is EDit functionality of Member Controller

public async Task<IActionResult> Edit(int memberId)
        {
            var memeber = await _context.Member.FindAsync(memberId); // Getting member by Id from database
            return View(new MemberViewModel() { Member = memeber });

        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Edit(MemberViewModel model, IFormFile photo/*int id, [Bind("MemberId,Name,Gender,DOB,MaritalStatus,Address,PhoneNo,Skills,Hobbies,JobTitle,Technology")] Member member*/)
        {
            if (photo == null || photo.Length == 0)
            {
                return Content("File not selected");
            }
   
            var path = Path.Combine(_webHostEnviroment.WebRootPath, "ImageName/Cover", photo.FileName);
            using (FileStream stream = new FileStream(path, FileMode.Create))
            {
                await photo.CopyToAsync(stream);
                stream.Close();
            }
            model.Member.ImageName = photo.FileName;

            //Finding the member by its Id which we would update
            var objMember = _context.Member.Where(mId => mId.MemberId == model.Member.MemberId).FirstOrDefault();

            if (objMember != null)
            {
                //Update the existing member with new value
                objMember!.Name = model.Member.Name;
                objMember!.Gender = model.Member.Gender;
                objMember!.DOB = model.Member.DOB;
                objMember!.MaritalStatus = model.Member.MaritalStatus;
                objMember!.Address = model.Member.Address;
                objMember!.PhoneNo = model.Member.PhoneNo;
                objMember!.Skills = model.Member.Skills;
                objMember!.Hobbies = model.Member.Hobbies;
                objMember!.JobTitle = model.Member.JobTitle;
                objMember!.Technology = model.Member.Technology;
                objMember!.ImageName = model.Member.ImageName;
                objMember!.ImageLocation = path;

                await _context.SaveChangesAsync();
            }
            return RedirectToAction("Index");

        }

And this is a View Where I get Error

@model TeamManagement.ViewModel.MemberViewModel

<form asp-action="Edit" method="post" enctype="multipart/form-data">
<div class="row">
        <div class="form-group col-md-4">
            <label class="col-md-2 control-label">MemberPicture</label>
            <div class="col-md-10">
                <img src="~/ImageName/Cover/@Model.Member.ImageName"
                     class="rounded-square"
                     height="50" width="75"
                     style="border:1px"
                     asp-append-version="true" accept="image/*" />
                <span><a href="@Model.Member.ImageName">@Model.Member.ImageName</a></span>
                <div id="chooseFile">
                    <input class="form-control" type="file" name="photo" accept="image/*" />
                </div>
            </div>
        </div>
    </div>

This is my ViewModel name as MemberVieModel

using System;
using TeamManagement.Models;

namespace TeamManagement.ViewModel
{
    public class MemberViewModel
    {
        public Member Member { get; set; }
        public IFormFile? Photo { get; set; }
    }
}

View Model ScreenShot

enter image description here

So that is I tried your Code that will running when i implement on my code they give that error

gourav kumar
  • 121
  • 1
  • 14

1 Answers1

1

I get error when I click on edit button it show error in img src (null reference)

This is because you haven't followed the instruction accordingly. You haven't set <input type="hidden" asp-for="Member.MemberId" /> at the beginning on your form so the compiler doesn't get Id which Id need to be update. So set the Member.MemberId on the top of your form as hidden item it's mandatory for 'edit':

Error you will encounter at:

  var objMember = _context.Member.Where(mId => mId.MemberId == model.Member.MemberId).FirstOrDefault();

Note: When you will not set <input type="hidden" asp-for="Member.MemberId" /> at your form here it will not get the reference which Id need to be update and throw the error you are getting.

Solution:

<form asp-action="EditMember" method="post" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly"></div>
            <input type="hidden" asp-for="Member.MemberId" />
 </form>

Another point:

Make sure you have set the [Key] on the top of your Member Model. It should be like below:

public class Member
    {
        [Key]
        public int MemberId { get; set; }
        [StringLength(60, MinimumLength = 3)]

        public string? Name { get; set; }

        public string? Gender { get; set; }
        public DateTime DOB { get; set; }

        public string? ImageName { get; set; }
        public string? ImageLocation { get; set; }
       
    }
halfer
  • 19,824
  • 17
  • 99
  • 186
Md Farid Uddin Kiron
  • 16,817
  • 3
  • 17
  • 43