Avatar of Crystal Rouse
Crystal Rouse
Flag for United States of America asked on

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

C#* asp.net core mvc

Avatar of undefined
Last Comment
Crystal Rouse

8/22/2022 - Mon
kaufmed

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 Rouse

ASKER
Can you please give an example of how to use it in the View?
kaufmed

That's line 1 of your first code snippet.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck
Crystal Rouse

ASKER
I tried setting ViewBag.Message = "Test" in the controller.  I get nothing.  
I'm not doing something right here.
ASKER CERTIFIED SOLUTION
kaufmed

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
Crystal Rouse

ASKER
Thank you so much for the sample code!