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