Пользовательская модель связующего ядра asp.net для привязки словаря - PullRequest
0 голосов
/ 03 июля 2019

У меня есть следующий код для создания представления.Эти поля должны быть извлечены из базы данных для создания HTML-элементов.Тип поля может быть string, bool и Array.При публикации данных, как я могу вернуть данные в соответствующие типы?Это можно сделать с помощью привязки пользовательской модели (IModelBinder).Я искал пример, но не смог его найти.

Контроллер:

public IActionResult Test()
        {
            var model = new Dictionary<string, object>
                {{"first", "firstValue"}, {"second", "secondValue"}, {"third", new[] {"arjun", "khadka"}}};
            //var view = new MyModel {MyDict = model};
            return View(model);
        }

        [HttpPost]
        public IActionResult Test(Dictionary<string, object> mydict)
        {
            var model = new Dictionary<string, object>();
            return View(model);
        }

Вид:

@model Dictionary<string, object>
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Test</title>
</head>
<body>
    <form method="post">
        @foreach (KeyValuePair<string, object> item in Model)
        {
            @if (item.Value is Array array)
            {<select multiple="multiple">
                    @foreach (var neitem in array)
                    {
                        <option value="@neitem">neitem</option>
                    }
                </select>
            }
            else
            {
                <input name="@item.Key" value="@item.Value" />
            }

        }
        <button type="submit"> save</button>
    </form>
</body>
</html>

Страница:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 03 июля 2019

Вам не нужно пользовательское связующее для моделей. Вам просто нужно правильно сгенерировать имена полей.

@foreach (var item in Model)
{
    if (item.Value is Array array)
    {
        <select asp-for="@Model[item.Key]" multiple="multiple">
            @foreach (var neitem in array)
            {
                <option value="@neitem">neitem</option>
            }
        </select>
    }
    else
    {
        <input asp-for="@Model[item.Key]" />
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...