[英]Model binding a form created from configurations in ASP.NET Core Razor Pages/MVC
在我的数据库中,我已经为产品配置了字段:
实体外观如下:
产品领域
ID(PK)
产品编号(FK)
标签(用作字段标签)
类型(文本,TextArea)
页面加载时,我的产品实体有一个页面模型,该模型具有一个导航属性,称为Fields of ProductField类型。 用我的剃须刀语法,我正在执行以下操作:
<form method="post">
@{
int i = 0;
if (Model.Product.Fields.Count > 0)
{
@foreach (var field in Model.Product.Fields)
{
if (field.Type == "Text")
{
<input id="txt_@i" type="text">
}
else if (field.Type == "Signature")
{
<textarea id="txtArea_@i"></textarea>
}
i++;
}
}
}
</form>
我遇到的问题是创建一个可以正确发布的ViewModel,这样我就可以访问每个字段的值并将其存储在数据库中。
数据库中还有另一个表,用于存储每个字段的值:
ProductFieldValue
ProductFieldId(FK)
UserId(填写表单的用户的ID)
值(该字段的值)
使用Razor Pages或MVC在这种情况下对绑定进行建模的正确方法是什么?
要对Razor Pages中的数据列表进行绑定建模,您需要使用name
属性将所有数据传递到后端。
在PageModel中,声明要存储输入数据的列表
[BindProperty]
public List<string> DataStored { get; set; }
在剃刀视图中
<form method="post">
@{
int i = 0;
if (Model.Product.Fields.Count > 0)
{
@foreach (var field in Model.Product.Fields)
{
if (field.Type == "Text")
{
<input type="text" id="txt_@i" class="items" name="DataStored[@i]" />
}
else if (field.Type == "Signature")
{
<textarea id="txtArea_@i" class="items" name="DataStored[@i]" ></textarea>
}
i++;
}
}
}
如果使用MVC,则接受“列表”作为操作参数。
[HttpPost]
public IActionResult Create(List<string> dataStored)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.