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