• 1402/02/03
  • 0
  • 59
1402/02/03 |
backend

باگ هنگام اجرا پروژه حذف کاربر

 

      public IActionResult Delete(string Id)
        {
            var user = _userManager.FindByIdAsync(Id).Result;
            UserDeleteDto userDelete = new UserDeleteDto()
            {
                Id = user.Id,
                Email = user.Email,
                FullName =user.FullName,
               
            };
            return View(userDelete);
        }

        [HttpPost]
        public IActionResult Delete(UserDeleteDto userDelete)
        {
            var user = _userManager.FindByIdAsync(userDelete.Id).Result;

            var result = _userManager.DeleteAsync(user).Result;

            if (result.Succeeded)
            {
                return RedirectToAction("Index", "Account");

            }

            string message = "";
            foreach (var item in result.Errors.ToList())
            {
                message += item.Description + Environment.NewLine;
            }
            TempData["Message"] = message;

            return View(userDelete);
        }

        public IActionResult Index()
        {
            var users = _userManager.Users
                .Select(p => new UserListDto
                {
                    Id = p.Id,
                    FullName = p.FullName,
                    UserName = p.Email,
                    PhoneNumber = p.PhoneNumber,
                    AccessFailedCount = p.AccessFailedCount
                }).ToList();
            return View(users);
        }

 

/////////////////////////


namespace WebSite.EndPoint.Models.ViewModels.User
{
    public class UserDeleteDto
    {
        public string Id { get; set; }
        [Display(Name="نام و نام خانوادگی")]
        public string FullName { get; set; }
        [Display(Name="شماره تلفن همراه")]
        public string PhoneNumber { get; set; }
        [Display(Name ="ایمیل")]
        public string Email { get; set; }
    }
}

//////////////////////

@model WebSite.EndPoint.Models.ViewModels.User.UserDeleteDto

@{
    ViewData["Title"] = "Delete";
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
}

<h1>حذف کاربر</h1>

<h3>آیا از حذف این کاربر مطمئن هستید؟</h3>
<div>
  
    <hr />
    <dl class="row">
  
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.FullName)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.FullName)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.PhoneNumber)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.PhoneNumber)
        </dd>
        <dt class = "col-sm-2">
            @Html.DisplayNameFor(model => model.Email)
        </dt>
        <dd class = "col-sm-10">
            @Html.DisplayFor(model => model.Email)
        </dd>
    </dl>
    
    <form asp-action="Delete">
        <input type="submit" value="Delete" class="btn btn-danger" /> |
        <a asp-action="Index">Back to List</a>
    </form>
</div>

باگ زیر را دریافت می کنم

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=EndPoint.ShoppingTerminal
  StackTrace:
   at WebSite.EndPoint.Controllers.AccountController.Delete(String Id) in C:\Users\azadeh\Desktop\14020130\ShoppingTerminal\EndPoint.ShoppingTerminal\Controllers\AccountController.cs:line 197
 


این خطا به این معناست که متغیر user در اکشن Delete از نوع null است و در نتیجه، به عنوان یک شیء معتبر در برنامه استفاده نمی شود. این مشکل معمولاً زمانی ایجاد می شود که شیء مورد نظر پیدا نشود یا خالی باشد.

در این حالت، می توانید ابتدا بررسی کنید که آیا متغیر user در اکشن Delete دارای مقدار null است یا خیر؟ برای این منظور، می توانید از عبارت شرطی if استفاده کنید، به شکل زیر:

public IActionResult Delete(string Id)
{
    var user = _userManager.FindByIdAsync(Id).Result;

    if (user == null)
    {
        // handle the case where the user was not found
        return NotFound();
    }

    UserDeleteDto userDelete = new UserDeleteDto()
    {
        Id = user.Id,
        Email = user.Email,
        FullName =user.FullName,
    };
    return View(userDelete);
}

در اینجا، بررسی می شود که آیا متغیر user مقدار null دارد یا خیر. اگر user مقدار null داشته باشد، ابتدا باید با یک پاسخ NotFound() به کاربر اطلاع داده شود که کاربر یافت نشد، سپس برنامه ادامه پیدا می کند. اگر user مقدار مناسبی داشته باشد، کد مربوط به ایجاد userDelete ادامه پیدا می کند و در نهایت، شیء userDelete به عنوان نتیجه برای نمایش به view ارسال می شود.

در صورتی که بعد از انجام این تغییرات، همچنان خطا وجود داشته باشد، می توانید به علت خطا در خط مشخص شده در پیام خطا، یعنی خط 197 در فایل AccountController.cs مراجعه کنید و کد مربوط به آن را بررسی کنید.



پاسخی برای این باگ ارسال کنید

لطفا کدها را درون قطعه کد ارسال نمایید

برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری