这是两段代码:
这是我的模特:
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指定泛型类型,因为它无法自动检测它。有什么不对吗?
答案 0 :(得分:0)
我发现了我的问题:
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)
然后一切正常。
希望这可以帮助某人。