ASP.NET Core 3 MVC:对象列表的模型绑定

海牛

我正在尝试将名称列表发布到表单,允许用户选择相关名称,然后将其重新发布。一切正常,但发回为空。你能指出我的愚蠢错误吗?

[HttpGet]
public IActionResult Start()
{
    // Get guid and name for all chars and post as list with PC/NPC role and selector.
    // Post this list to the view.
    List<CombatantSelect>cs_list = new List<CombatantSelect>();

    var chars = _context.Characters.AsEnumerable();

    foreach(var c in chars)
    {
        CombatantSelect cs = new CombatantSelect();
        cs.CharGuid = c.Id.ToString();
        cs.Name = c.Name;
        cs.Role = c.PlayerRole.ToString();
        cs_list.Add(cs);
    }

    return View(cs_list);
}

这是发布此列表的控制器动作见图。当它到达时,我现在正确地形成了它。

表的视图

我使用此视图渲染表格。

@using Traveller_Web_2.ViewModels
@model List<CombatantSelect>
@{ 
    ViewData["Title"] = "Start";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Start</h1>

<h6>tbc</h6>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post" asp-action="Start" asp-controller="Combat">
            <table class="table">
                <thead class="">
                    <tr>
                        <th>Select for combat</th>
                        <th>Name</th>
                        <th>Role</th>
                    </tr>
                </thead>
                <tbody>

                        @Html.EditorForModel("CombatantSelect")
                </tbody>
            </table>
                <input asp-action="Start" asp-controller="Combat" type="submit" value="Select" class="btn btn-primary" />
        </form>
    </div>
</div>

这是视图模型:

public class CombatantSelect
{
        [Key]
        public string CharGuid { get; set; }
        public string Name { get; set; }
        public string Role { get; set; }
        public bool SelectForCombat { get; set; }
}

这个编辑器模板:

@model IEnumerable<Traveller_Web_2.ViewModels.CombatantSelect>
@for (int i = 0; i < Model.Count(); i++)
{
    <tr>
        <td>
            <input id="SelectForCombat[@i]" asp-for="@Model.ElementAt(i).SelectForCombat" type="checkbox" name="SelectForCombat[@i]" itemid="@i" />
           </td>
        <td>
           <input id="Name[@i]" name="Name[@i]" asp-for="@Model.ElementAt(i).Name" type="text"  />
        </td>
        <td>
            <input id="Name[@i]" name="Name[@i]" asp-for="@Model.ElementAt(i).Role" type="text"  />
            <input id="CharGuid[@i]" name="CharGuid[@i]" type="hidden" asp-for="@Model.ElementAt(i).CharGuid"  />
        </td>
    </tr>
}

这是演示ID和Name中索引的一部分。

<form method="post" action="/Combat/Start">
            <table class="table">
                <thead class="">
                    <tr>
                        <th>Select for combat</th>
                        <th>Name</th>
                        <th>Role</th>
                    </tr>
                </thead>
                <tbody>

                            <tr>
        <td>
            <input id="SelectForCombat[0]" type="checkbox" name="SelectForCombat[0]" itemid="0" data-val="true" data-val-required="The SelectForCombat field is required." value="true" />
           </td>
        <td>
           <input id="Name[0]" name="Name[0]" type="text" value="Chief Sales Officer" />
        </td>
        <td>
            <input id="Name[0]" name="Name[0]" type="text" value="Player" />
            <input id="CharGuid[0]" name="CharGuid[0]" type="hidden" value="bf373774-691a-43f2-5ff8-08d75cab14e2" />
        </td>
    </tr>
    <tr>
        <td>
            <input id="SelectForCombat[1]" type="checkbox" name="SelectForCombat[1]" itemid="1" value="true" />
           </td>
        <td>
           <input id="Name[1]" name="Name[1]" type="text" value="Deputy Shop Assistant" />
        </td>
        <td>
            <input id="Name[1]" name="Name[1]" type="text" value="FriendlyNPC" />
            <input id="CharGuid[1]" name="CharGuid[1]" type="hidden" value="347298c5-984b-460a-f9f8-08d75cac89b9" />
        </td>
    </tr>

它回传到控制器中的该方法。

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Start([Bind("CharGuid, Role, SelectForCombat, Name")] 
                           List<CombatantSelect> combatantSelects)
{
    // If it works do something with it, if not give it back
    if (ModelState.IsValid)
    {
        combatantSelects.Count();
    }

    return View(combatantSelects);
}

ModelState没有错误-它告诉我有一个名单CombatantSelect,但它具有计数0。

有任何想法吗?提前谢谢了。

Arjun Vachhani

MVC根据过帐值重新创建模型。它检查特定的名称以再次创建模型。因此HTML中的名称应与模型中的名称对齐。尝试下面的代码来解决模型绑定问题

将类型的模型传递List<Traveller_Web_2.ViewModels.CombatantSelect>给视图

如下修改代码,以使生成的HTML输入控件名称与模型对齐

@model List<Traveller_Web_2.ViewModels.CombatantSelect>
@for (int i = 0; i < Model.Count; i++)
{
    <tr>
        <td>
            @Html.CheckBoxFor(x => x[i].SelectForCombat)
        </td>
        <td>
           @Html.TextBoxFor(x => x[i].Name)
        </td>
        <td>
           @Html.TextBoxFor(x => x[i].Role)
           @Html.HiddenFor(x => x[i].CharGuid)
        </td>
    </tr>
}

上面的代码应创建一个名称,其名称与模型对齐。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在asp.net core 3 MVC中包含列表属性的模型的表单

来自分类Dev

模型绑定对象集合作为 ASP.Net Core MVC 中模型的一个属性

来自分类Dev

模型绑定Asp net core 2.2

来自分类Dev

在asp.net mvc 4中回发时未绑定到模型的对象列表

来自分类Dev

包含2个域模型的ASP.NET Core MVC绑定视图模型

来自分类Dev

ASP.Net Core异常-无法为模型对象创建模型绑定程序

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

使用GET的ASP.Net MVC模型绑定复杂对象

来自分类常见问题

在ASP.NET Core MVC中在运行时动态绑定模型

来自分类Dev

Asp.Net Core MVC-复杂模型在“获取控制器”操作上未绑定

来自分类Dev

在ASP.NET Core MVC中在运行时动态绑定模型

来自分类Dev

ASP.NET Core MVC - 在运行时绑定到模型

来自分类Dev

ASP.NET Core 2 部分视图列表模型绑定

来自分类Dev

Asp .Net Core 3.1 Razor页面:复杂模型绑定

来自分类Dev

将 JSON 对象绑定到 ASP.NET Core 中的列表

来自分类Dev

具有在SingleView中创建的实体列表的Asp.Net Core MVC EF模型

来自分类Dev

包含对象列表的对象的ASP.NET Core 3.0 MVC CRUD

来自分类Dev

使用ASP.NET Core 3.x中的[FromRoute]绑定到复杂对象会产生null

来自分类Dev

Asp Net core 3的配置是否与Asp Net core 3无关?

来自分类Dev

如何调试ASP.NET Core MVC数据绑定?

来自分类Dev

空输入字符串的ASP.Net MVC模型绑定创建空模型对象

来自分类Dev

Asp.net- Mvc复杂模型绑定

来自分类Dev

ASP.NET Core MVC 2.2失去模型价值

来自分类Dev

在 ASP .Net Core MVC 2.1 模型中访问 List<T>

来自分类Dev

ASP.NET Core 中配置对象的模型验证

来自分类Dev

.NET Standard和.NET Core 3.x或ASP.NET Core 3.x

Related 相关文章

  1. 1

    在asp.net core 3 MVC中包含列表属性的模型的表单

  2. 2

    模型绑定对象集合作为 ASP.Net Core MVC 中模型的一个属性

  3. 3

    模型绑定Asp net core 2.2

  4. 4

    在asp.net mvc 4中回发时未绑定到模型的对象列表

  5. 5

    包含2个域模型的ASP.NET Core MVC绑定视图模型

  6. 6

    ASP.Net Core异常-无法为模型对象创建模型绑定程序

  7. 7

    ASP.NET MVC中的问题模型绑定嵌套列表

  8. 8

    ASP.NET MVC 5模型绑定列表为空

  9. 9

    ASP.NET MVC中的问题模型绑定嵌套列表

  10. 10

    ASP.NET MVC 5模型绑定列表为空

  11. 11

    使用GET的ASP.Net MVC模型绑定复杂对象

  12. 12

    在ASP.NET Core MVC中在运行时动态绑定模型

  13. 13

    Asp.Net Core MVC-复杂模型在“获取控制器”操作上未绑定

  14. 14

    在ASP.NET Core MVC中在运行时动态绑定模型

  15. 15

    ASP.NET Core MVC - 在运行时绑定到模型

  16. 16

    ASP.NET Core 2 部分视图列表模型绑定

  17. 17

    Asp .Net Core 3.1 Razor页面:复杂模型绑定

  18. 18

    将 JSON 对象绑定到 ASP.NET Core 中的列表

  19. 19

    具有在SingleView中创建的实体列表的Asp.Net Core MVC EF模型

  20. 20

    包含对象列表的对象的ASP.NET Core 3.0 MVC CRUD

  21. 21

    使用ASP.NET Core 3.x中的[FromRoute]绑定到复杂对象会产生null

  22. 22

    Asp Net core 3的配置是否与Asp Net core 3无关?

  23. 23

    如何调试ASP.NET Core MVC数据绑定?

  24. 24

    空输入字符串的ASP.Net MVC模型绑定创建空模型对象

  25. 25

    Asp.net- Mvc复杂模型绑定

  26. 26

    ASP.NET Core MVC 2.2失去模型价值

  27. 27

    在 ASP .Net Core MVC 2.1 模型中访问 List<T>

  28. 28

    ASP.NET Core 中配置对象的模型验证

  29. 29

    .NET Standard和.NET Core 3.x或ASP.NET Core 3.x

热门标签

归档