我需要一个通用的内联助手来显示字段。
这是我目前拥有的:
@helper DisplayField(Func<MyModel, string> field)
{
if (string.IsNullOrWhiteSpace(field(Model)) == false)
{
<div class="row"> @field(Model) </div>
}
}
用法:
@DisplayField(m => m.Name)
@DisplayField(m => m.PhoneNumber)
我不知道如何在助手内部显示 Label(DisplayAttribute)。请帮忙。
最佳答案
在您的页面顶部,添加 using for System.Linq.Expressions,例如。
@using System.Linq.Expressions
(或在 web.config 中添加此命名空间)。
然后创建助手,它看起来像这样:
@helper DisplayField(Expression<Func<MyModel, string>> field)
{
@Html.LabelFor(field)
@Html.DisplayFor(field)
}
您可以在其中添加额外的逻辑来检查空值等。您最好创建一个 HtmlHelper,这样您就可以使用通用类型参数而不是上面的“MyModel”和“string”。当我上次尝试时,无法将泛型类型参数添加到内联帮助器,例如。以下是不可能的,除非此功能已被添加:
@helper DisplayField<TModel, TValue>(Expression<Func<TModel, TValue>> field)
{
@Html.LabelFor(field)
@Html.DisplayFor(field)
}
因此,要获得通用方法,您可以使用自定义 HtmlHelper。为此:
创建如下文件:
using System; using System.Linq; using System.Linq.Expressions; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Html; namespace MvcApplication1.HtmlHelpers { public static class HtmlHelpers { public static MvcHtmlString DisplayFieldFor<TModel, TValue>( this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> field) { var labelString = helper.LabelFor(field); var displayString = helper.DisplayFor(field); return MvcHtmlString.Create( labelString.ToString() + displayString.ToString()); } } }
在你的页面中,这样的东西的用法是:
@Html.DisplayFieldFor(m => m.Name) @Html.DisplayFieldFor(m => m.PhoneNumber)
等您可能需要检查页面上的使用情况或将 HtmlHelper 的命名空间添加到 web.config 中。
关于c# - 字段的 ASP.NET MVC 内联帮助程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261279/