C# 模型绑定从ASP.NET Core Razor Pages/MVC中的配置创建的表单

C# 模型绑定从ASP.NET Core Razor Pages/MVC中的配置创建的表单,c#,razor,asp.net-core,asp.net-core-mvc,razor-pages,C#,Razor,Asp.net Core,Asp.net Core Mvc,Razor Pages,在我的数据库中,我为产品配置了字段: 以下是实体的外观: ProductField Id(主键) ProductId(FK) 标签(用作字段标签) 类型(文本,文本区域) 当页面加载时,我的产品实体有一个页面模型,它有一个名为ProductField类型的字段的导航属性。在我的razor语法中,我正在执行以下操作: <form method="post"> @{ int i = 0; if (Model.Product.Fields.Coun

在我的数据库中,我为产品配置了字段:

以下是实体的外观:

ProductField
Id(主键)
ProductId(FK)
标签(用作字段标签)
类型(文本,文本区域)

当页面加载时,我的产品实体有一个页面模型,它有一个名为ProductField类型的字段的导航属性。在我的razor语法中,我正在执行以下操作:

<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>

@{
int i=0;
如果(Model.Product.Fields.Count>0)
{
@foreach(Model.Product.Fields中的var字段)
{
如果(field.Type==“Text”)
{
}
else if(field.Type==“签名”)
{
}
i++;
}
}
}
我遇到的问题是创建一个ViewModel,该ViewModel可以正确地发布到,这样我就可以访问每个字段的值并将其存储在数据库中

数据库中还有另一个表用于存储每个字段的值:

ProductFieldValue
ProductFieldId(FK)
UserId(填写表单的用户的Id)
值(该字段的值)


在这种情况下,使用Razor Pages或MVC对绑定建模的正确方法是什么?

要对Razor Pages中的数据列表进行绑定建模,需要使用
name
属性将所有数据传递到后端

在PageModel中,声明列表以存储输入数据

[BindProperty]
public List<string> DataStored { get; set; }
[BindProperty]
公共列表数据存储{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++;
        }
    }
}

@{
int i=0;
如果(Model.Product.Fields.Count>0)
{
@foreach(Model.Product.Fields中的var字段)
{
如果(field.Type==“Text”)
{
}
else if(field.Type==“签名”)
{
}
i++;
}
}
}

如果使用MVC,则接受列表作为操作参数

[HttpPost]
public IActionResult Create(List<string> dataStored)
[HttpPost]
公共IActionResult创建(列表数据存储)

明白了,但现在我只有一个字符串列表。我如何知道哪个字段的值,以便将其存储到ProductFieldValues中并保存?我想如果我注意排序的准确性,我可以按顺序进行排序。