为ASP.NET MVC的ValidationMessageFor创建可重用的解决方案,可以通过自定义扩展方法来实现。
首先,我们可以创建一个静态类,命名为"HtmlHelperExtensions",并在该类中定义一个静态方法,命名为"ReusableValidationMessageFor",该方法接受一个泛型参数TModel和一个表达式参数expression,返回一个MvcHtmlString对象。
using System;
using System.Linq.Expressions;
using System.Web.Mvc;
public static class HtmlHelperExtensions
{
public static MvcHtmlString ReusableValidationMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
var propertyName = ExpressionHelper.GetExpressionText(expression);
var modelState = htmlHelper.ViewData.ModelState;
if (modelState.ContainsKey(propertyName) && modelState[propertyName].Errors.Count > 0)
{
var error = modelState[propertyName].Errors[0].ErrorMessage;
return MvcHtmlString.Create($"<span class='error'>{error}</span>");
}
return MvcHtmlString.Empty;
}
}
上述代码中,我们使用了泛型参数TModel和TProperty来表示模型和属性类型。方法内部首先获取属性的名称,然后通过模型状态获取该属性的错误信息。如果存在错误信息,则将其包装在一个带有CSS类名"error"的span标签中返回,否则返回一个空的MvcHtmlString对象。
接下来,我们可以在视图中使用这个扩展方法。首先,确保在视图中引入命名空间"YourProjectNamespace.Extensions",然后使用"Html"辅助器调用"ReusableValidationMessageFor"方法。
@using YourProjectNamespace.Extensions
@model YourProjectNamespace.Models.YourModel
@Html.ReusableValidationMessageFor(m => m.YourProperty)
上述代码中,"YourProjectNamespace"应替换为你的项目命名空间,"YourModel"应替换为你的模型类名,"YourProperty"应替换为你的属性名。
这样,我们就创建了一个可重用的解决方案,可以在多个视图中使用"ReusableValidationMessageFor"方法来显示验证错误信息。
领取专属 10元无门槛券
手把手带您无忧上云