Passing Error Message from Controller to ViewBag

Trying to figure out how to get a error message to the View Bag.  I have this in my View:

 @if (!string.IsNullOrEmpty(ViewBag.Message))
    {
        <script type="text/javascript">
        swal({
            title: "Error",
            text: "@ViewBag.Message",
            type: "error"
        }, function () {
            url = '@Url.Action("Index", "Requests")';
            window.location.href = url;
        });
        </script>
    }

Open in new window


My Controller has both a Get and a Post and I'm not sure how to get the error message to my View in the ViewBag.Message

[HttpGet]
        public ActionResult Index()
        {

            ViewBag.Message = String.Empty;
            if (!String.IsNullOrEmpty(HttpContext.Session["Error"]?.ToString()))
            {
                ViewBag.Message = HttpContext.Session["Error"].ToString();
                HttpContext.Session.Remove("Error");
            }

            return View();
        }

 [HttpPost]
        public ActionResult Upload(HttpPostedFileBase file, string Name)
        {
            var result = new { Success = "", Message = "" };
            try
                {
                    string pdfTemplate = "NewRequest.pdf";
                    byte[] pdfbytes = null;
                    BinaryReader rdr = new BinaryReader(file.InputStream);
                    pdfbytes = rdr.ReadBytes((int)file.ContentLength);
                    PdfReader reader = new PdfReader(pdfbytes);

                    string t = Name.Trim().Length == 0 ? null : Name;
                    var fields = reader.AcroFields.Fields;
                    var RequestID = reader.AcroFields.GetField("requestId");
                    var OpenDate = reader.AcroFields.GetField("openDate");
                    var Org = reader.AcroFields.GetField("organization");
                    var NeedDate = reader.AcroFields.GetField("needDate");
                    var FirstName = reader.AcroFields.GetField("firstName");
                    var LastName = reader.AcroFields.GetField("lastName");
                     .....
                  
                    tbl_Request request = new tbl_Request()
                    {
                        addedDate = DateTime.Now,
                        title = t,
                        requestId = RequestID,
                        openDate = Convert.ToDateTime(OpenDate),
                        organization = Org,
                        needDate = Convert.ToDateTime(NeedDate),
                        firstName = FirstName,
                        lastName = LastName

                       ..........
                    };

                    myDB.tbl_Request.Add(request);
                    myDB.SaveChanges();
                }
                catch (Exception ex)
                {
                    Utility util = new Utility();
                    string error = util.innerExcep(ex);
                result = new { Success = "False", Message = error };
                return RedirectToAction("Index", "Upload", new { Result = result });
                }

            return RedirectToAction("Index", "Requests", new { });
        }

Open in new window

Crystal RouseTask LeadAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

kaufmed   (⌐■_■)Shot Through the Heart, and You're to Blame, You Give vars a Bad NameCommented:
ViewBag's data type is dynamic. That means you won't get any Intellisense on it. Other than that, just assign to it at whatever place in your controller is appropriate:

ViewBag.Message = "Uh-oh!!";

Open in new window

Crystal RouseTask LeadAuthor Commented:
Can you please give an example of how to use it in the View?
kaufmed   (⌐■_■)Shot Through the Heart, and You're to Blame, You Give vars a Bad NameCommented:
That's line 1 of your first code snippet.
CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

Crystal RouseTask LeadAuthor Commented:
I tried setting ViewBag.Message = "Test" in the controller.  I get nothing.  
I'm not doing something right here.
kaufmed   (⌐■_■)Shot Through the Heart, and You're to Blame, You Give vars a Bad NameCommented:
Here's a simplified example:

Controller
using System.Web.Mvc;

namespace WebApplication3.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            ViewModel viewModel = new ViewModel();

            viewModel.Greeting = "Hello World!!";

            return View(viewModel);
        }

        [HttpPost]
        public ActionResult Index(ViewModel viewModel)
        {
            if (string.IsNullOrWhiteSpace(viewModel.Greeting))
            {
                ViewBag.Message = "You must supply a greeting!";
            }

            return View(viewModel);
        }
    }

    public class ViewModel
    {
        public string Greeting { get; set; }
    }
}

Open in new window


View
@model WebApplication3.Controllers.ViewModel

@{
    ViewBag.Title = "Home Page";
}


<form method="post" class="container">
    <div class="row">
        <div class="col-md-3">
            <input type="text" name="@nameof(Model.Greeting)" value="@Model.Greeting" />
        </div>
        <div class="col-md-2">
            <label>@Model.Greeting</label>
        </div>
        <div class="col-md-2">
            <button type="submit">Send</button>
        </div>
    </div>
</form>

@if (!string.IsNullOrWhiteSpace(ViewBag.Message))
{
    <script>
        alert('@ViewBag.Message');
    </script>
}

Open in new window


Screenshot

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Crystal RouseTask LeadAuthor Commented:
Thank you so much for the sample code!
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C#

From novice to tech pro — start learning today.