【问题标题】:Model binding a form created from configurations in ASP.NET Core Razor Pages/MVC模型绑定从 ASP.NET Core Razor Pages/MVC 中的配置创建的表单
【发布时间】:2019-06-03 18:50:06
【问题描述】:

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

这是实体的样子:

产品字段
身份证 (PK)
产品 ID (FK)
标签(用作字段标签)
类型(文本、文本区域)

当页面加载时,我的产品实体有一个页面模型,它有一个名为 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 建模绑定的正确方法是什么?

【问题讨论】:

    标签: c# razor asp.net-core asp.net-core-mvc razor-pages


    【解决方案1】:

    要与 Razor 页面中的数据列表进行模型绑定,您需要使用 name 属性将所有数据传递到后端。

    在PageModel中,声明List来存储输入数据

    [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,则接受 List 作为操作参数。

    [HttpPost]
    public IActionResult Create(List<string> dataStored)
    

    【讨论】:

    • 知道了,但此时我只有一个字符串列表。我如何知道哪个字段的值,以便我可以存储到我的 ProductFieldValues 中并保存?
    • 如果我小心我的排序是否准确,我想我可以按订单进行。
    猜你喜欢
    • 2020-02-19
    • 2019-04-05
    • 2020-11-27
    • 2023-02-04
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2021-04-10
    相关资源
    最近更新 更多