Migrate .net core 2.2 to 3.1, I have trouble with "Microsoft.AspNetCore.Mvc.ViewFeatures". In this code, ExpressionMetadataProvider.FromLambdaExpression not support in .net core 3.1.
public static IHtmlContent CustomTextBoxFor<TModel, TProperty>(
this IHtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
object htmlAttributes
)
{
var member = expression.Body as MemberExpression;
var stringLength = member.Member
.GetCustomAttributes(typeof(StringLengthAttribute), false)
.FirstOrDefault() as StringLengthAttribute;
var expresionProvider = htmlHelper.ViewContext.HttpContext.RequestServices
.GetService(typeof(ModelExpressionProvider)) as ModelExpressionProvider;
var modelExplorer = ExpressionMetadataProvider.FromLambdaExpression(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider);
ModelMetadata metadata = modelExplorer.Metadata;
string htmlFieldName = expresionProvider.GetExpressionText(expression);
string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
Migrate .net core 2.2 to 3.1, I have trouble with "Microsoft.AspNetCore.Mvc.ViewFeatures". In this code, ExpressionMetadataProvider.FromLambdaExpression not support in .net core 3.1.
From ASP.NET Core 3.0, some pubinternal
APIs are updated to be truly internal, which seems cause your above issue.
And as mentioned in this github issue , it offers ModelExpressionProvider
in 3.0+ that's available from DI and expose the method(s) that can return an instance of ModelExpression
which is a superset for ModelExplorer
that ExpressionMetadataProvider
returns.
Question is about .NET Core 3.1; but I stumbled upon this because I had the same problem in .NET 6
Snippet to get the actual value
HttpContext.RequestServices.GetRequiredService<IModelExpressionProvider>().CreateModelExpression(viewData, expression).ModelExplorer.Model;
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.