【问题标题】:Custom Model binder asp.net core to bind dictionary自定义模型绑定器 asp.net 核心绑定字典
【发布时间】:2019-11-14 07:15:24
【问题描述】:

我有以下代码来生成视图。这些字段应该从数据库中获取以生成 html 元素。字段类型可以是字符串、布尔值和数组。在发布数据时,我怎样才能将数据取回各自的类型?这可以使用自定义模型绑定( 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>

页面:

【问题讨论】:

  • 通过使用 Dictionary 我能够获取输入字段的数据。考虑到我想要获取数据数组的多选情况。
  • @CamiloTerevinto 我如何才能为动态字段实现这一点?

标签: c# asp.net-core asp.net-core-mvc


【解决方案1】:

您不需要自定义模型绑定器。您只需要正确生成字段名称即可。

@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]" />
    }
}

【讨论】:

  • 控制器呢?你能显示一些代码吗?我的意思是我可以使用字典
  • 我仍然有空值。你能看看上面的图片吗
猜你喜欢
  • 2022-12-16
  • 1970-01-01
  • 2018-05-07
  • 2019-07-06
  • 2018-06-22
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
相关资源
最近更新 更多