public static MvcHtmlString DasValidationMessageFor <TModel, TProperty>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TProperty> > expression) { var propertyName = ExpressionHelper.GetExpressionText(expression); if (htmlHelper.ViewData.ModelState.IsValidField(propertyName)) { return(new MvcHtmlString(string.Empty)); } var error = htmlHelper.ViewData.ModelState[propertyName].Errors.First(); var errorMesage = ValidationMessage.ExtractFieldMessage(error.ErrorMessage); var builder = new TagBuilder("span"); builder.AddCssClass("error-message"); builder.AddCssClass("field-validation-error"); builder.Attributes.Add("id", $"error-message-{propertyName}"); builder.SetInnerText(errorMesage); return(new MvcHtmlString(builder.ToString())); }
public void ThenFieldMessageIsExtracted(string source, string expected) { var bannerMessage = ValidationMessage.ExtractFieldMessage(source); Assert.AreEqual(expected, bannerMessage); }
public override void Execute() { WriteLiteral("\r\n"); WriteLiteral("<div"); WriteLiteral(" id=\"edit-started-apprentice\""); WriteLiteral(">\r\n <div"); WriteAttribute("class", Tuple.Create(" class=\"", 250), Tuple.Create("\"", 362) , Tuple.Create(Tuple.Create("", 258), Tuple.Create("form-error-group", 258), true) , Tuple.Create(Tuple.Create(" ", 274), Tuple.Create("form-group", 275), true) , Tuple.Create(Tuple.Create(" ", 285), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.FirstNameError) ? "error" : "" , 286), false) ); WriteLiteral(">\r\n"); WriteLiteral(" "); Write(Html.Label("FirstName", "First name", new { @class = "form-label form-label-bold" })); WriteLiteral("\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.FirstNameError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-firstname\""); WriteLiteral(">"); Write(Model.Apprenticeship.FirstNameError); WriteLiteral("</span>\r\n"); } WriteLiteral(" "); Write(Html.TextBox("FirstName", Model.Apprenticeship.FirstName, new { @class = "form-control form-control-3-4" })); WriteLiteral("\r\n </div>\r\n\r\n <div"); WriteAttribute("class", Tuple.Create(" class=\"", 811), Tuple.Create("\"", 922) , Tuple.Create(Tuple.Create("", 819), Tuple.Create("form-error-group", 819), true) , Tuple.Create(Tuple.Create(" ", 835), Tuple.Create("form-group", 836), true) , Tuple.Create(Tuple.Create(" ", 846), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.LastNameError) ? "error" : "" , 847), false) ); WriteLiteral(">\r\n"); WriteLiteral(" "); Write(Html.Label("LastName", "Last name", new { @class = "form-label form-label-bold" })); WriteLiteral("\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.LastNameError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-lastname\""); WriteLiteral(">"); Write(Model.Apprenticeship.LastNameError); WriteLiteral("</span>\r\n"); } WriteLiteral(" "); Write(Html.TextBox("LastName", Model.Apprenticeship.LastName, new { @class = "form-control form-control-3-4" })); WriteLiteral("\r\n </div>\r\n\r\n <div"); WriteAttribute("class", Tuple.Create(" class=\"", 1364), Tuple.Create("\"", 1478) , Tuple.Create(Tuple.Create("", 1372), Tuple.Create("form-error-group", 1372), true) , Tuple.Create(Tuple.Create(" ", 1388), Tuple.Create("form-group", 1389), true) , Tuple.Create(Tuple.Create(" ", 1399), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.DateOfBirthError) ? "error" : "" , 1400), false) ); WriteLiteral(">\r\n\t<hr />\r\n <span"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Date of birth</span>\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">For example, 08 12 2001</span>\r\n\r\n <div"); WriteLiteral(" class=\"form-date\""); WriteLiteral(">\r\n\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.DateOfBirthError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-dateofbirth\""); WriteLiteral(">"); Write(Model.Apprenticeship.DateOfBirthError); WriteLiteral("</span>\r\n"); } WriteLiteral("\r\n <div"); WriteLiteral(" class=\"form-group form-group-day\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"DateOfBirth.Day\""); WriteLiteral(">\r\n Day\r\n </label>\r\n\r\n"); WriteLiteral(" "); Write(Html.TextBox("DateOfBirth.Day", Model.Apprenticeship.DateOfBirth.Day, new { @class = "form-control length-limit", type = "number", maxlength = "2", min = "1", max = "31", aria_labelledby = "DateOfBirth.Day" })); WriteLiteral("\r\n\r\n </div>\r\n <div"); WriteLiteral(" class=\"form-group form-group-month\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"DateOfBirth.Month\""); WriteLiteral(">\r\n Month\r\n </label>\r\n\r\n"); WriteLiteral(" "); Write(Html.TextBox("DateOfBirth.Month", Model.Apprenticeship.DateOfBirth.Month, new { @class = "form-control length-limit", type = "number", maxlength = "2", min = "1", max = "12", aria_labelledby = "DateOfBirth.Month" })); WriteLiteral("\r\n\r\n </div>\r\n <div"); WriteLiteral(" class=\"form-group form-group-year\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"DateOfBirth.Year\""); WriteLiteral(">\r\n Year\r\n </label>\r\n\r\n"); WriteLiteral(" "); Write(Html.TextBox("DateOfBirth.Year", Model.Apprenticeship.DateOfBirth.Year, new { @class = "form-control length-limit", type = "number", maxlength = "4", min = "1900", max = "9999", aria_labelledby = "DateOfBirth.Year" })); WriteLiteral("\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div"); WriteLiteral(" id=\"form-error-group form-group\""); WriteLiteral(">\r\n <div"); WriteLiteral(" class=\"form-group\""); WriteLiteral(">\r\n <hr />\r\n <label"); WriteLiteral(" class=\"form-label form-label-bold\""); WriteLiteral(" for=\"ULN\""); WriteLiteral(">Unique learner number</label>\r\n <span"); WriteLiteral(" id=\"uln\""); WriteLiteral(">"); Write(Model.Apprenticeship.ULN); WriteLiteral("</span>\r\n </div>\r\n </div>\r\n\r\n"); if (Model.Apprenticeship.IsLockedForUpdate || Model.Apprenticeship.IsUpdateLockedForStartDateAndCourse) { WriteLiteral(" <div"); WriteLiteral(" class=\"form-group\""); WriteLiteral(">\r\n <hr />\r\n <label"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(" for=\"TrainingCode\""); WriteLiteral(">Apprenticeship training course</label>\r\n <span>"); Write(Model.Apprenticeship.TrainingName); WriteLiteral("</span>\r\n </div>\r\n"); Write(Html.Hidden("TrainingCode", Model.Apprenticeship.TrainingCode)); Write(Html.Hidden("TrainingName", Model.Apprenticeship.TrainingName)); } else { WriteLiteral(" <div"); WriteAttribute("class", Tuple.Create(" class=\"", 3962), Tuple.Create("\"", 4060) , Tuple.Create(Tuple.Create("", 3970), Tuple.Create("form-group", 3970), true) , Tuple.Create(Tuple.Create(" ", 3980), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.TrainingCodeError) ? "error" : "" , 3981), false) ); WriteLiteral(">\r\n <hr />\r\n <label"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(" for=\"TrainingCode\""); WriteLiteral(">Apprenticeship training course</label>\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">Start typing in the name of the course or choose an option from the list</span>\r" + "\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.TrainingCodeError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-TrainingCode\""); WriteLiteral(">Choose a training course for this apprentice</span>\r\n"); } WriteLiteral(" <select"); WriteLiteral(" name=\"TrainingCode\""); WriteLiteral(" id=\"TrainingCode\""); WriteLiteral(" class=\"form-control form-control-3-4\""); WriteLiteral(" aria-label=\"Apprenticeship training course\""); WriteLiteral(">\r\n <option"); WriteLiteral(" value=\"\""); WriteLiteral(">Please select</option>\r\n"); foreach (var apprenticeshipProduct in Model.ApprenticeshipProgrammes) { WriteLiteral(" <option"); WriteAttribute("value", Tuple.Create(" value=\"", 4876), Tuple.Create("\"", 4909) , Tuple.Create(Tuple.Create("", 4884), Tuple.Create <System.Object, System.Int32>(apprenticeshipProduct.CourseCode , 4884), false) ); WriteLiteral(" "); if (apprenticeshipProduct.CourseCode == Model.Apprenticeship.TrainingCode) { Write(Html.Raw("selected")); } WriteLiteral(">\r\n"); WriteLiteral(" "); Write(apprenticeshipProduct.Name); WriteLiteral("\r\n </option>\r\n"); } WriteLiteral(" </select>\r\n </div>\r\n"); } WriteLiteral("\r\n"); if (Model.Apprenticeship.IsLockedForUpdate || Model.Apprenticeship.IsUpdateLockedForStartDateAndCourse) { WriteLiteral(" <div"); WriteLiteral(" class=\"form-error-group form-group\""); WriteLiteral(">\r\n <hr />\r\n <label"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Planned training start date</label>\r\n <span>"); Write(Model.Apprenticeship.StartDate.DateTime.Value.ToGdsFormatWithoutDay()); WriteLiteral(" </span>\r\n </div>\r\n"); Write(Html.Hidden("StartDate.Month", Model.Apprenticeship.StartDate.Month)); Write(Html.Hidden("StartDate.Year", Model.Apprenticeship.StartDate.Year)); } else { WriteLiteral(" <div"); WriteAttribute("class", Tuple.Create(" class=\"", 5735), Tuple.Create("\"", 5847) , Tuple.Create(Tuple.Create("", 5743), Tuple.Create("form-error-group", 5743), true) , Tuple.Create(Tuple.Create(" ", 5759), Tuple.Create("form-group", 5760), true) , Tuple.Create(Tuple.Create(" ", 5770), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.StartDateError) ? "error" : "" , 5771), false) ); WriteLiteral(">\r\n <hr />\r\n\r\n <span"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Planned training start date</span>\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">For example, 09 2017</span>\r\n\r\n <div"); WriteLiteral(" id=\"StartDate\""); WriteLiteral(" class=\"form-date\""); WriteLiteral(">\r\n\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.StartDateError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-StartDate\""); WriteLiteral(">"); Write(ValidationMessage.ExtractFieldMessage(Model.Apprenticeship.StartDateError)); WriteLiteral("</span>\r\n"); } WriteLiteral("\r\n <div"); WriteLiteral(" class=\"form-group form-group-month\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"StartDate.Month\""); WriteLiteral(">Month</label>\r\n\r\n"); WriteLiteral(" "); Write(Html.TextBox("StartDate.Month", Model.Apprenticeship.StartDate.Month, new { @class = "form-control length-limit", type = "number", maxlength = "2", min = "1", max = "12", aria_labelledby = "StartDate.Month" })); WriteLiteral("\r\n\r\n </div>\r\n <div"); WriteLiteral(" class=\"form-group form-group-year\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"StartDate.Year\""); WriteLiteral(">Year</label>\r\n"); WriteLiteral(" "); Write(Html.TextBox("StartDate.Year", Model.Apprenticeship.StartDate.Year, new { @class = "form-control length-limit", type = "number", maxlength = "4", min = "1900", max = "9999", aria_labelledby = "StartDate.Year" })); WriteLiteral("\r\n </div>\r\n </div>\r\n\r\n </div>\r\n"); } WriteLiteral(" "); if (Model.Apprenticeship.IsEndDateLockedForUpdate) { WriteLiteral(" <div"); WriteLiteral(" class=\"form-error-group form-group\""); WriteLiteral(">\r\n <hr />\r\n <span"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Planned training finish date</span>\r\n <span"); WriteLiteral(" class=\"\""); WriteLiteral(">"); Write(Model.Apprenticeship.EndDate.DateTime.Value.ToGdsFormatWithoutDay()); WriteLiteral(" </span>\r\n </div>\r\n"); Write(Html.Hidden("EndDate.Month", Model.Apprenticeship.EndDate.Month)); Write(Html.Hidden("EndDate.Year", Model.Apprenticeship.EndDate.Year)); } else { WriteLiteral(" <div"); WriteAttribute("class", Tuple.Create(" class=\"", 7682), Tuple.Create("\"", 7792) , Tuple.Create(Tuple.Create("", 7690), Tuple.Create("form-error-group", 7690), true) , Tuple.Create(Tuple.Create(" ", 7706), Tuple.Create("form-group", 7707), true) , Tuple.Create(Tuple.Create(" ", 7717), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.EndDateError) ? "error" : "" , 7718), false) ); WriteLiteral(">\r\n\r\n <span"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Planned training finish date</span>\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">For example, 02 2019</span>\r\n\r\n <div"); WriteLiteral(" id=\"EndDate\""); WriteLiteral(" class=\"form-date\""); WriteLiteral(">\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.EndDateError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-EndDate\""); WriteLiteral(">"); Write(ValidationMessage.ExtractFieldMessage(Model.Apprenticeship.EndDateError)); WriteLiteral("</span>\r\n"); } WriteLiteral("\r\n <div"); WriteLiteral(" class=\"form-group form-group-month\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"EndDate.Month\""); WriteLiteral(">\r\n Month\r\n </label>\r\n\r\n"); WriteLiteral(" "); Write(Html.TextBox("EndDate.Month", Model.Apprenticeship.EndDate.Month, new { @class = "form-control length-limit", type = "number", maxlength = "2", min = "1", max = "12", aria_labelledby = "EndDate.Month" })); WriteLiteral("\r\n\r\n </div>\r\n <div"); WriteLiteral(" class=\"form-group form-group-month\""); WriteLiteral(">\r\n <label"); WriteLiteral(" for=\"EndDate.Year\""); WriteLiteral(">\r\n Year\r\n </label>\r\n"); WriteLiteral(" "); Write(Html.TextBox("EndDate.Year", Model.Apprenticeship.EndDate.Year, new { @class = "form-control length-limit", type = "number", maxlength = "4", min = "1900", max = "9999", aria_labelledby = "EndDate.Year" })); WriteLiteral("\r\n </div>\r\n </div>\r\n </div>\r\n"); } WriteLiteral("\r\n <div"); WriteAttribute("class", Tuple.Create(" class=\"", 9166), Tuple.Create("\"", 9273) , Tuple.Create(Tuple.Create("", 9174), Tuple.Create("form-error-group", 9174), true) , Tuple.Create(Tuple.Create(" ", 9190), Tuple.Create("form-group", 9191), true) , Tuple.Create(Tuple.Create(" ", 9201), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.CostError) ? "error" : "" , 9202), false) ); WriteLiteral(">\r\n <hr />\r\n\r\n"); if (Model.Apprenticeship.IsLockedForUpdate) { WriteLiteral(" <label"); WriteLiteral(" for=\"Cost\""); WriteLiteral(">\r\n <span"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Total agreed apprenticeship price (excluding VAT)</span>\r\n </label>\r\n" + ""); WriteLiteral(" <span"); WriteLiteral(" class=\"heading-small\""); WriteLiteral(">£ </span>\r\n"); WriteLiteral(" <span>"); Write(Model.Apprenticeship.Cost); WriteLiteral("</span>\r\n"); Write(Html.Hidden("Cost", Model.Apprenticeship.Cost)); WriteLiteral(" <div"); WriteLiteral(" class=\"approve-alert\""); WriteLiteral(">\r\n <div"); WriteLiteral(" class=\"panel panel-border-wide alert-blue\""); WriteLiteral(@"> If you want to change the total agreed apprenticeship price, you'll need to ask your training provider to make the changes on your behalf. We'll ask you to approve any changes they make. </div> </div> "); } else { WriteLiteral(" <label"); WriteLiteral(" for=\"Cost\""); WriteLiteral(">\r\n <span"); WriteLiteral(" class=\"form-label-bold\""); WriteLiteral(">Total agreed apprenticeship price (excluding VAT)</span>\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">Enter the price, including any end-point assessment costs, in whole pounds.</spa" + "n>\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">For example, for £1,500 enter 1500</span>\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.CostError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-cost\""); WriteLiteral(">"); Write(Model.Apprenticeship.CostError); WriteLiteral("</span>\r\n"); } WriteLiteral(" </label>\r\n"); WriteLiteral(" <span"); WriteLiteral(" class=\"heading-small\""); WriteLiteral(">£ </span>"); Write(Html.TextBox("Cost", Model.Apprenticeship.Cost, new { @class = "form-control form-control-3-4", type = "text", aria_labelledby = "Cost", maxlength = "7" })); } WriteLiteral("\r\n </div>\r\n\r\n <div"); WriteAttribute("class", Tuple.Create(" class=\"", 10933), Tuple.Create("\"", 11041) , Tuple.Create(Tuple.Create("", 10941), Tuple.Create("form-group", 10941), true) , Tuple.Create(Tuple.Create(" ", 10951), Tuple.Create("last-child", 10952), true) , Tuple.Create(Tuple.Create(" ", 10962), Tuple.Create <System.Object, System.Int32>(!string.IsNullOrEmpty(Model.Apprenticeship.EmployerRefError) ? "error" : "" , 10963), false) ); WriteLiteral(">\r\n <hr />\r\n"); WriteLiteral(" "); Write(Html.Label("EmployerRef", "Reference (optional)", new { @class = "form-label-bold" })); WriteLiteral("\r\n <span"); WriteLiteral(" class=\"form-hint\""); WriteLiteral(">Add a reference, such as employee number or location - this won\'t be seen by the" + " training provider</span>\r\n"); if (!string.IsNullOrEmpty(Model.Apprenticeship.EmployerRefError)) { WriteLiteral(" <span"); WriteLiteral(" class=\"error-message\""); WriteLiteral(" id=\"error-message-employerref\""); WriteLiteral(">"); Write(Model.Apprenticeship.EmployerRefError); WriteLiteral("</span>\r\n"); } WriteLiteral(" "); Write(Html.TextBox("EmployerRef", Model.Apprenticeship.EmployerRef, new { @class = "form-control form-control-3-4" })); WriteLiteral("\r\n <p"); WriteLiteral(" id=\"charCount-noJS\""); WriteLiteral(">Enter up to a maximum of 20 characters</p>\r\n <p"); WriteLiteral(" id=\"charCount\""); WriteLiteral(" style=\"display:none;\""); WriteLiteral("><span"); WriteLiteral(" name=\"countchars\""); WriteLiteral(" id=\"countchars\""); WriteLiteral("></span> characters remaining</p>\r\n </div>\r\n</div>\r\n"); }