繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM