如何将此代码转换为AspNetCore
public static MvcHtmlString ChqLabelFor<TModel, TValue>(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression, object htmlAttributes)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string resolvedLabelText = metadata.DisplayName ?? metadata.PropertyName;
if (metadata.IsRequired)
{
resolvedLabelText += "*";
}
return LabelExtensions.LabelFor<TModel, TValue>(html, expression, resolvedLabelText, htmlAttributes);
}
我知道我现在可以使用MvcHtmlString
而不是HtmlString
如何处理
ModelMetadata.FromLambdaExpression
我找不到任何替代方案......
答案 0 :(得分:22)
那些助手仍然存在,但他们被埋没了一点。
var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
然后,您可以使用
访问元数据modelExplorer.Metadata
和模型本身
modelExplorer.Model
我在这里有一些示例代码,用于PowerBI嵌入式报表呈现。
https://blogs.endjin.com/2016/09/how-to-use-power-bi-embedded-with-aspnetcore/
答案 1 :(得分:5)
在netcore 3.0中:
从DI获取ModelExpressionProvider
的实例
使用CreateModelExpression
方法
var metadata = _modelExpressionProvider.CreateModelExpression(ViewData, expression).Metadata;
P.S 为了扩展HtmlHelper,我建议另一种方法:
public class CustomHtmlHelper : HtmlHelper, ICustomHtmlHelper
{
// add your extension methods here and in ICustomHtmlHelper
// _modelExpressionProvider will be part of constructor
// register implementation in DI
}
并在视图中使用新的帮助器:
@inject ICustomHtmlHelper Html
答案 2 :(得分:0)
从@willDaBeast 对另一个答案的评论来看,对我有用的是我提供的以下代码作为更好的格式的单独答案。虽然这可能不是推荐的做法。
ModelExpressionProvider expressionProvider = new ModelExpressionProvider(htmlHelper.MetadataProvider);
var metadata = expressionProvider.CreateModelExpression(htmlHelper.ViewData,expression);