Модель связывания формы, созданной из конфигураций в ASP.NET Core Razor Pages / MVC - PullRequest
0 голосов
/ 09 января 2019

В моей базе данных я настроил поля для продукта:

Вот как выглядит объект:

ProductField
Идентификатор (ПК)
ProductId (FK)
Метка (используется в качестве метки поля)
Тип (Text, TextArea)

Когда страница загружается, у меня есть Модель страницы для моей сущности продукта, которая имеет свойство навигации, которое называется Поля типа 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 (идентификатор пользователя, заполняющего форму)
Значение (значение для этого поля)

Как правильно моделировать привязку в подобном сценарии, используя Razor Pages или MVC?

1 Ответ

0 голосов
/ 09 января 2019

Чтобы смоделировать привязку со списком данных в 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, то примите List в качестве параметров действия.

[HttpPost]
public IActionResult Create(List<string> dataStored)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...