And*_*rei 4 c# asp.net-mvc html-helper expression-trees razor
我需要一个通用的内联帮助器来显示字段.
这是我目前的情况:
@helper DisplayField(Func<MyModel, string> field)
{
if (string.IsNullOrWhiteSpace(field(Model)) == false)
{
<div class="row"> @field(Model) </div>
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
@DisplayField(m => m.Name)
@DisplayField(m => m.PhoneNumber)
Run Code Online (Sandbox Code Playgroud)
我不知道如何在帮助器中显示Label(DisplayAttribute).请帮忙.
在页面顶部,添加for for System.Linq.Expressions,例如.
@using System.Linq.Expressions
Run Code Online (Sandbox Code Playgroud)
(或在web.config中添加此命名空间).
然后创建帮助器,它看起来像:
@helper DisplayField(Expression<Func<MyModel, string>> field)
{
@Html.LabelFor(field)
@Html.DisplayFor(field)
}
Run Code Online (Sandbox Code Playgroud)
你可以在那里添加额外的逻辑来检查空值等.你可能最好创建一个HtmlHelper,这样你可以使用泛型类型参数而不是上面的"MyModel"和"string".当我上次尝试时,无法将内联类型参数添加到内联帮助程序,例如.下面是不是有可能,除非这个功能已经添加:
@helper DisplayField<TModel, TValue>(Expression<Func<TModel, TValue>> field)
{
@Html.LabelFor(field)
@Html.DisplayFor(field)
}
Run Code Online (Sandbox Code Playgroud)
因此,要获得泛型方法,您将使用自定义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());
}
}
}
Run Code Online (Sandbox Code Playgroud)在您的页面中,这样的事情的用法将是:
@Html.DisplayFieldFor(m => m.Name)
@Html.DisplayFieldFor(m => m.PhoneNumber)
Run Code Online (Sandbox Code Playgroud)您可能需要检查页面上的使用情况或将HtmlHelper的命名空间添加到web.config中.
| 归档时间: |
|
| 查看次数: |
1805 次 |
| 最近记录: |