【发布时间】:2023-02-22 05:19:54
【问题描述】:
我在运行时生成一个对象以用作 EditForm 模型。验证工作正常,但我不确定如何设置需要 Expression<Func<object>> 的 ValidationMessage 组件。
我想通过反射为它提供一个属性。像这样:
<ValidationMessage For="@(() => modelType.GetProperty("MyString").GetValue(model))" />
如何从运行时生成的对象属性中获取表达式?
编辑:
这是我的代码:
<EditForm Model="@GeneratedModel" OnInvalidSubmit="@HandleInvalidSubmit" OnValidSubmit="@OnValidSubmit">
<DataAnnotationsValidator />
<input @bind="TestPropBind" type="text" />
<ValidationMessage For="@ValidationFor" />
</EditForm>
@code
{
private object GeneratedModel { get; set; }
private string TestPropBind
{
get
{
PropertyInfo? propertyInfo = GeneratedModel.GetType().GetProperty("Test");
MethodInfo? getMethod = propertyInfo.GetGetMethod();
return getMethod.Invoke(GeneratedModel, new object?[0]) as string;
}
set
{
PropertyInfo? propertyInfo = GeneratedModel.GetType().GetProperty("Test");
MethodInfo? setMethod = propertyInfo.GetSetMethod();
setMethod.Invoke(GeneratedModel, new[] { value });
}
}
protected override void OnInitialized()
{
//GeneratedModel created and instantiated here at runtime
}
}
【问题讨论】:
-
AFAIK 你不能。但是你能展示更多你的代码吗?至少整个 EditForm 部分。
-
@SalehYusefnejad 我更新了它
-
我建议为那些共享道具使用通用组件和基类/接口。 (基本没有反映)
标签: c# .net validation blazor blazor-editform