Is there is any why to pass array of error messages to toastr js.i want to show multiple toastr messages using array

anyone have any solution?

controller Details

this is controller where multiple error message generated in for loop

 public async Task<IActionResult> Register(RegisterViewModel model)
        {
           var result = await userManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                var token = await userManager.GenerateEmailConfirmationTokenAsync(user);

                var confirmationLink = Url.Action("ConfirmEmail", "AccountRoles",
                                        new { userId = user.Id, token = token }, Request.Scheme);
               

            }

            foreach (var error in result.Errors)
            {
                TempData["msg"] = error.Description;
            }


            return View(model);
        }

js

 $(document).ready(function () {
                var a = '@TempData["msg"]';
                if (a != '')
                    toastr.error(a)    
            })

Answer

The for loop in your controller method does not generate an array of error messages. The line TempData["msg"] = error.Description is repeated in the loop which means that in your javascript calling @TempData["msg"] will result in only retrieving the last error message.

You need to generate a list of error messages and then store them in TempData.

TempData["msg"] = result.Errors.Select(x => x.Description).ToList();

And then in javascript, you loop over the resulting array and display an error message for each one.

$(document).ready(function () {
    var errors = @Html.Raw(Json.Serialize(TempData["msg"]));
    errors.forEach(x => toastr.error(x));
});

Leave a Reply

Your email address will not be published. Required fields are marked *