asp.net-mvc – 验证消息中的换行符

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 验证消息中的换行符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在测试一个事情的列表为null.每次找到一个,我将它保存在一个数组中,以便在一个验证消息中实现它.

输出我想看起来像这样:

字段1是必需的
需要领域4
等等…

但我似乎无法开始一条新线.

现在,看起来像这样:

字段1是必需的字段4是必需的

有人知道如何实现这一点吗?

编辑:

控制器:

  1. IDictionary<int,String> emptyFields = new Dictionary<int,String>();
  2.  
  3. foreach (Something thing in AnotherThing.Collection)
  4. {
  5. if (thing.Property == null)
  6. emptyFields.add(thing.Index,thing.Name);
  7. }
  8.  
  9. if (emptyFields.Any())
  10. throw new CustomException() { EmptyFields = emptyFields };

此异常在此处理:

  1. catch (CustomException ex)
  2. {
  3. ModelState.AddModelError("file",ex.GetExceptionString());
  4. return View("theView");
  5. }

CustomException:

  1. public class CustomException: Exception
  2. {
  3. public IDictionary<int,String> EmptyFields { get; set; }
  4. public override String Label { get { return "someLabel"; } }
  5. public override String GetExceptionString()
  6. {
  7. String msg = "";
  8. foreach (KeyValuePair<int,String> elem in EmptyFields)
  9. {
  10. msg += "row: " + (elem.Key + 1).ToString() + " column: " + elem.Value + "<br/>";
  11. }
  12. return msg;
  13. }
  14. }

视图:

  1. <span style="color: #FF0000">@Html.Raw(Html.ValidationMessage("file").ToString())</span>

解决方法

您将需要编写一个自定义帮助器来实现.内置的ValidationMessageFor帮助器自动将HTML编码为值.这里有一个例子:
  1. public static class ValidationMessageExtensions
  2. {
  3. public static IHtmlString MyValidationMessageFor<TModel,TProperty>(
  4. this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,TProperty>> ex
  5. )
  6. {
  7. var htmlAttributes = new RouteValueDictionary();
  8. string validationMessage = null;
  9. var expression = ExpressionHelper.GetExpressionText(ex);
  10. var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
  11. var formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;
  12. if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null)
  13. {
  14. return null;
  15. }
  16.  
  17. var modelState = htmlHelper.ViewData.ModelState[modelName];
  18. var modelErrors = (modelState == null) ? null : modelState.Errors;
  19. var modelError = (((modelErrors == null) || (modelErrors.Count == 0))
  20. ? null
  21. : modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]);
  22.  
  23. if (modelError == null && formContext == null)
  24. {
  25. return null;
  26. }
  27.  
  28. var builder = new TagBuilder("span");
  29. builder.MergeAttributes(htmlAttributes);
  30. builder.AddCssClass((modelError != null) ? HtmlHelper.ValidationMessageCssClassName : HtmlHelper.ValidationMessageValidCssClassName);
  31.  
  32. if (!String.IsNullOrEmpty(validationMessage))
  33. {
  34. builder.InnerHtml = validationMessage;
  35. }
  36. else if (modelError != null)
  37. {
  38. builder.InnerHtml = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext,modelError,modelState);
  39. }
  40.  
  41. if (formContext != null)
  42. {
  43. bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage);
  44. builder.MergeAttribute("data-valmsg-for",modelName);
  45. builder.MergeAttribute("data-valmsg-replace",replaceValidationMessageContents.ToString().ToLowerInvariant());
  46. }
  47.  
  48. return new HtmlString(builder.ToString(TagRenderMode.Normal));
  49. }
  50.  
  51. private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext,ModelError error,ModelState modelState)
  52. {
  53. if (!String.IsNullOrEmpty(error.ErrorMessage))
  54. {
  55. return error.ErrorMessage;
  56. }
  57. if (modelState == null)
  58. {
  59. return null;
  60. }
  61.  
  62. var attemptedValue = (modelState.Value != null) ? modelState.Value.AttemptedValue : null;
  63. return string.Format(CultureInfo.CurrentCulture,"Value '{0}' not valid for property",attemptedValue);
  64. }
  65. }

接着:

  1. public class Myviewmodel
  2. {
  3. [required(ErrorMessage = "Error Line1<br/>Error Line2")]
  4. public string SomeProperty { get; set; }
  5. }

并认为:

  1. @model Myviewmodel
  2. @using (Html.BeginForm())
  3. {
  4. @Html.EditorFor(x => x.SomeProperty)
  5. @Html.MyValidationMessageFor(x => x.SomeProperty)
  6. <button type="submit">OK</button>
  7. }

如果要在ValidationSummary中显示错误消息,您还可以编写一个自定义帮助器,不会像this post显示的那样对错误消息进行HTML编码.

猜你在找的asp.Net相关文章