gpt4 book ai didi

c# - ValidationMessageFor 与 AddModelError(key, message) 一起。关键是什么?

转载 作者:可可西里 更新时间:2023-11-01 08:03:53 24 4
gpt4 key购买 nike

我正在为某个 viewModel 属性开发客户端和服务器端验证。

.cshtml 文件中我放了这个:

@Html.DropDownListFor(model => model.EntityType.ParentId, Model.ParentTypeList, "")
@Html.ValidationMessageFor(model => model.EntityType.ParentId)

在 Controller 中进行业务验证

catch (BusinessException e)
{
ModelState.AddModelError("EntityType.ParentId", Messages.CircularReference);
}

以上按预期工作:如果捕获到异常,则消息会出现在下拉列表旁边。

但是,我发现这种方式不是很优雅。在 cshtml 中,我使用一种方法生成有关验证的所有必需信息。在 Controller 中,我必须知道确切的 Key 字符串并使用它。

没有更好的方法吗?

最佳答案

您可以编写一个扩展方法,它将采用 lambda 表达式而不是字符串作为键:

public static class ModelStateExtensions
{
public static void AddModelError<TModel, TProperty>(
this ModelStateDictionary modelState,
Expression<Func<TModel, TProperty>> ex,
string message
)
{
var key = ExpressionHelper.GetExpressionText(ex);
modelState.AddModelError(key, message);
}
}

然后使用这个方法:

catch (BusinessException e)
{
ModelState.AddModelError<MyViewModel, int>(
x => x.EntityType.ParentId,
Messages.CircularReference
);
}

关于c# - ValidationMessageFor 与 AddModelError(key, message) 一起。关键是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12688082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com