【发布时间】:2022-01-13 09:50:03
【问题描述】:
刚刚发现GetType().GetProperties()竟然存在,这样可以用吗?
目标是使用循环来获取特定实体上的所有属性,而无需在 HTML 中对每个属性进行硬编码,更新每个已编辑的属性并借助 [BindProperty] 注释将新信息保存在 OnPost 中。 我无法正确绑定 asp-for taghelper。
<form method="post">
@foreach (var prop in Model.Product.GetType().GetProperties())
{
<label asp-for="@prop.Name"></label>
<input asp-for="@prop.GetValue(Model.Product)" class="form-control" />
}
<button type="submit" class="btn btn-primary">Update</button>
</form>
运行此代码会出现以下异常:
InvalidOperationException: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
如果我在标签内使用 value="@prop.GetValue(Model.Product)" 我在加载编辑页面时正确获取信息。但是在提交表单时,我没有得到以前输入的新值。
这是模型页面中的模型
[BindProperty]
public ProductModel? Product { get; set; }
OnGet()
{
Product = db.GetProduct(id);
}
感谢您抽出宝贵时间阅读本文!
【问题讨论】:
-
感谢您的提醒和您提供的答案:)
标签: c# html asp.net-core razor razor-pages