为什么可以';t我在Razor函数部分使用Html.DisplayNameFor
本文关键字:函数部 DisplayNameFor Html Razor 我在 为什么 | 更新日期: 2024-10-21 09:14:14
这是两段代码:
这是我的型号:
public class EnrollRequest
{
[Display(Name = "姓名")]
public string Name { get; set; }
[Display(Name = "性别")]
public Gender? Gender { get; set; }
// And other properties
}
我将此模型用于此页面:
@model EnrollRequest
这个可以通过编译:
@{
System.Linq.Expressions.Expression<Func<EnrollRequest, string>> exp = item => item.Name;
Html.DisplayNameFor(exp);
}
但这个不能:
@functions
{
public MvcHtmlString DisplayData<EnrollRequest, TValue>(System.Linq.Expressions.Expression<Func<EnrollRequest, TValue>> exp)
{
return DisplayDataTable(Html.DisplayNameFor(exp), Html.DisplayFor(exp));
}
}
@helper DisplayDataTable(MvcHtmlString name, MvcHtmlString data)
{
<tr>
<th scope="row">@name</th>
<td>@data</td>
</tr>
}
它在第一个Html
:上报告如下错误
'HtmlHelper<EnrollRequest>' does not contain a definition for 'DisplayNameFor' and the best extension method overload 'DisplayNameExtensions.DisplayNameFor<EnrollRequest, TValue>(HtmlHelper<IEnumerable<EnrollRequest>>, Expression<Func<EnrollRequest, TValue>>)' requires a receiver of type 'HtmlHelper<IEnumerable<EnrollRequest>>'
它似乎需要一个IEnumerable作为模型,但实际上我没有。但是Html.DisplayNameFor
的相同调用在助手中是有效的。怎么了?
===
编辑:我这样调用DisplayData:
<table class="table">
<tbody>
@DisplayData(item => item.Name)
@DisplayData(item => item.Gender)
@DisplayData(item => item.School)
@DisplayData(item => item.Grade)
@DisplayData(item => item.Email)
</tbody>
</table>
它要求我指定DisplayData的通用类型,因为它无法自动检测到它。有什么问题吗?
我发现了我的问题:
public MvcHtmlString DisplayData<EnrollRequest, TValue>(System.Linq.Expressions.Expression<Func<EnrollRequest, TValue>> exp)
{
return DisplayDataTable(Html.DisplayNameFor(exp), Html.DisplayFor(exp));
}
我不小心在它实际上不需要的泛型类型中编写了EnrollRequest
。只需进行此修改:
public MvcHtmlString DisplayData<TValue>(System.Linq.Expressions.Expression<Func<EnrollRequest, TValue>> exp)
然后一切都很好。
希望这能帮助到别人。