代码之家  ›  专栏  ›  技术社区  ›  Blake Rivell

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

  •  -1
  • Blake Rivell  · 技术社区  · 6 年前

    以下是实体的外观:

    产品领域
    Id(主键)


    类型(文本,文本区域)

    当页面加载时,我的产品实体有一个页面模型,它有一个名为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>
    

    我遇到的问题是创建一个ViewModel,它可以正确地发布到,这样我就可以访问每个字段的值并将其存储在数据库中。

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

    产品字段值
    产品字段ID(FK)

    值(该字段的值)

    在这样的场景中,使用Razor页面或MVC对绑定建模的正确方法是什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Ryan    6 年前

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

    [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++;
            }
        }
    }
    

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