asp.net-mvc – 验证消息中的换行符
发布时间:2020-05-23 04:56:06 所属栏目:asp.Net 来源:互联网
导读:我正在测试一个事情的列表为null.每次找到一个,我将它保存在一个数组中,以便在一个验证消息中实现它. 输出我想看起来像这样: 字段1是必需的 需要领域4 等等… 但我似乎无法开始一条新线. 现在,看起来像这样: 字段1是必需的字段4是必需的 有人知道如何实现这
|
我正在测试一个事情的列表为null.每次找到一个,我将它保存在一个数组中,以便在一个验证消息中实现它. 输出我想看起来像这样: 字段1是必需的 但我似乎无法开始一条新线. 现在,看起来像这样: 字段1是必需的字段4是必需的 有人知道如何实现这一点吗? 编辑: 控制器: IDictionary<int,String> emptyFields = new Dictionary<int,String>();
foreach (Something thing in AnotherThing.Collection)
{
if (thing.Property == null)
emptyFields.add(thing.Index,thing.Name);
}
if (emptyFields.Any())
throw new CustomException() { EmptyFields = emptyFields };
此异常在此处理: catch (CustomException ex)
{
ModelState.AddModelError("file",ex.GetExceptionString());
return View("theView");
}
CustomException: public class CustomException: Exception
{
public IDictionary<int,String> EmptyFields { get; set; }
public override String Label { get { return "someLabel"; } }
public override String GetExceptionString()
{
String msg = "";
foreach (KeyValuePair<int,String> elem in EmptyFields)
{
msg += "row: " + (elem.Key + 1).ToString() + " column: " + elem.Value + "<br/>";
}
return msg;
}
}
视图: <span style="color: #FF0000">@Html.Raw(Html.ValidationMessage("file").ToString())</span>
解决方法您将需要编写一个自定义帮助器来实现.内置的ValidationMessageFor帮助器自动将HTML编码为值.这里有一个例子:public static class ValidationMessageExtensions
{
public static IHtmlString MyValidationMessageFor<TModel,TProperty>(
this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel,TProperty>> ex
)
{
var htmlAttributes = new RouteValueDictionary();
string validationMessage = null;
var expression = ExpressionHelper.GetExpressionText(ex);
var modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
var formContext = htmlHelper.ViewContext.ClientValidationEnabled ? htmlHelper.ViewContext.FormContext : null;
if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null)
{
return null;
}
var modelState = htmlHelper.ViewData.ModelState[modelName];
var modelErrors = (modelState == null) ? null : modelState.Errors;
var modelError = (((modelErrors == null) || (modelErrors.Count == 0))
? null
: modelErrors.FirstOrDefault(m => !String.IsNullOrEmpty(m.ErrorMessage)) ?? modelErrors[0]);
if (modelError == null && formContext == null)
{
return null;
}
var builder = new TagBuilder("span");
builder.MergeAttributes(htmlAttributes);
builder.AddCssClass((modelError != null) ? HtmlHelper.ValidationMessageCssClassName : HtmlHelper.ValidationMessageValidCssClassName);
if (!String.IsNullOrEmpty(validationMessage))
{
builder.InnerHtml = validationMessage;
}
else if (modelError != null)
{
builder.InnerHtml = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext,modelError,modelState);
}
if (formContext != null)
{
bool replaceValidationMessageContents = String.IsNullOrEmpty(validationMessage);
builder.MergeAttribute("data-valmsg-for",modelName);
builder.MergeAttribute("data-valmsg-replace",replaceValidationMessageContents.ToString().ToLowerInvariant());
}
return new HtmlString(builder.ToString(TagRenderMode.Normal));
}
private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext,ModelError error,ModelState modelState)
{
if (!String.IsNullOrEmpty(error.ErrorMessage))
{
return error.ErrorMessage;
}
if (modelState == null)
{
return null;
}
var attemptedValue = (modelState.Value != null) ? modelState.Value.AttemptedValue : null;
return string.Format(CultureInfo.CurrentCulture,"Value '{0}' not valid for property",attemptedValue);
}
}
接着: public class MyViewModel
{
[Required(ErrorMessage = "Error Line1<br/>Error Line2")]
public string SomeProperty { get; set; }
}
并认为: @model MyViewModel
@using (Html.BeginForm())
{
@Html.EditorFor(x => x.SomeProperty)
@Html.MyValidationMessageFor(x => x.SomeProperty)
<button type="submit">OK</button>
}
如果要在ValidationSummary中显示错误消息,您还可以编写一个自定义帮助器,不会像 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET奇怪的编译错误
- ASP.net会话请求排队
- asp.net-mvc – ASP.NET MVC 2中的空查询字符串参数的模型绑
- asp.net-mvc – 根据活动页面有条件地显示部分视图
- asp.net-mvc – MVC 5防止通过iframe访问内容
- asp.net-mvc-3 – ASP.NET MVC 3和Razor的ASHX处理程序
- ASP.NET页面生命周期解释
- asp.net – 如何使用AspNetSqlMembershipProvider正确验证m
- asp.net-mvc – angular js和asp.net mvc 4示例应用程序
- asp.net-mvc – 我需要有关HandleError的更多信息
