In this article I will explain with an example, how to pass and show Exception (Error) message from Controller to View in
ASP.Net MVC Razor.
The Exception (Error) message will be displayed from Controller to View using
Html.ValidationSummary Html Helper function in
ASP.Net MVC Razor.
Configuring Bundles and enabling Client Side Validation
Please refer the following article for complete information on how to configure
Bundles and enable Client Side validation in
ASP.Net MVC project.
Note: By default, the validation done using
Data Annotation attributes is
Server Side. And hence to make it work Client Side, the Client Side validation must be enabled.
Model
The Model class consists of one property
Age to which the following validation
Data Annotation attributes have been applied.
The Required
Data Annotation attribute have been specified with a property
Error Message with a string value. As the name suggests, this string value will be displayed to the user when the respective
validation fails.
public class PersonModel
{
[Display(Name = "Age")]
[Required(ErrorMessage = "Age is required.")]
public string Age { get; set; }
}
Controller
The Controller consists of following Action methods.
Action method for handling GET operation
Inside this Action method, simply the View is returned.
Action method for handling POST operation
This action method handles the POST operation and when the form is submitted, the object of the PersonModel class is sent to this method.
The value of the Age is converted to Integer format in the Try block and in case any error occurs it is handled by the Catch block.
Inside the
Catch block, the Exception details are extracted from the Exception class object to form an
HTML string message and finally the
HTML string message is passed as parameter to the
ModelState.AddModelError function.
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(PersonModel person)
{
try
{
int age = int.Parse(person.Age);
}
catch (Exception ex)
{
string message = string.Format("<b>Message:</b> {0}<br /><br />", ex.Message);
message += string.Format("<b>StackTrace:</b> {0}<br /><br />", ex.StackTrace.Replace(Environment.NewLine, string.Empty));
message += string.Format("<b>Source:</b> {0}<br /><br />", ex.Source.Replace(Environment.NewLine, string.Empty));
message += string.Format("<b>TargetSite:</b> {0}", ex.TargetSite.ToString().Replace(Environment.NewLine, string.Empty));
ModelState.AddModelError(string.Empty, message);
}
return View();
}
}
View
Inside the View, in the very first line the PersonModel class is declared as Model for the View.
The View consists of an
HTML Form which has been created using the
Html.BeginForm method with the following parameters.
ActionName – Name of the Action. In this case the name is Index.
ControllerName – Name of the Controller. In this case the name is Home.
FormMethod – It specifies the Form Method i.e. GET or POST. In this case it will be set to POST.
Inside the View, the following six
HTML Helper functions are used: -
1. Html.LabelFor – Displaying the Model property name.
2. Html.TextBoxFor – Creating a
TextBox for the Model property.
3. Html.ValidationMessageFor – Displaying the Validation message for the property.
4. Html.Raw – Rendering
HTML content in View.
5. HttpUtility.HtmlDecode – Decoding the
HTML string.
6. Html.ValidationSummary – The
ValidationSummary will be used for displaying the Exception Error message from the Controller. Since the Exception Error message is in
HTML format, the output from the
Html.ValidationSummary is decoded using
HttpUtility.HtmlDecode method and then displayed using
Html.Raw Helper method.
There is also Submit button which when clicked, the Form gets submitted.
The
jQuery and the
jQuery Validation script bundles are rendered at the end of the Model using the
Scripts.Render function.
@model Display_Exception_MVC.Models.PersonModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<table>
<tr>
<td>@Html.LabelFor(m =>m.Age)</td>
<td>@Html.TextBoxFor(m =>m.Age)</td>
<td>@Html.ValidationMessageFor(m =>m.Age, "", new { @class = "error" })</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Submit" /></td>
<td></td>
</tr>
</table>
@Html.Raw(HttpUtility.HtmlDecode((Html.ValidationSummary(false, "", new { @class = "exception" })).ToHtmlString()))
}
</body>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
</html>
Screenshot
Downloads