.NET Core MVC表单返回错误的模型值

问题描述 投票:0回答:1

我的视图中的表单没有返回模型的正确Id属性值,这有一个奇怪的问题。你会注意到在下面的代码中我有脚本部分记录模型的Id。这样做会在控制台上显示正确的ID,但是当Id传递给Controller的操作方法时,它始终为0,这是不正确的。

这是观点:

@model EotE_Encounter.Models.Encounter

<div>
    <h4>@Model.Name</h4>
    <div>
        <form asp-action="CreateCharacter" asp-controller="Encounter" data-bind="" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#character-container">
            <input id="encounterId" type="hidden" value="@Model.Id" />
            <button class="btn btn-default" type="submit">Create Character</button>
        </form>
    </div>
    <hr />
    <div>
        <ul>

            @{
                if(Model.CharactersInEncounter != null)
                {
                    foreach(Character character in Model.CharactersInEncounter)
                    {
                        <li>@character.Name</li>
                    }
                }
            }        
        </ul>
    </div>
</div>

<script>
    console.log(@Model.Id);
</script>

相关行动方法:

public ActionResult CreateCharacter(int encounterID)
        {
            return RedirectToAction("CreateCharacter", "Character", encounterID);
        }

和Encounter模型:

 public class Encounter
    {
        //these first three properties may not be used just yet.
        public int Id { get; set; }
        public string Name { get; set; }
        public byte Round { get; set; }
        public List<Character> CharactersInEncounter { get; set; }
        [StringLength(2000)]
        public string Notes { get; set; }

    }
asp.net-mvc razor asp.net-core
1个回答
0
投票

只有具有name属性的表单元素才会在提交表单时传递其值。因此,将name属性添加到隐藏元素。 Id和名称不一样。

@model EotE_Encounter.Models.Encounter

<div>
    <h4>@Model.Name</h4>
    <div>
        <form asp-action="CreateCharacter" asp-controller="Encounter" data-bind="" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#character-container">
            <input id="encounterId" name="encounterID" type="hidden" value="@Model.Id" />
            <button class="btn btn-default" type="submit">Create Character</button>
        </form>
    </div>
    <hr />
    <div>
        <ul>

            @{
                if(Model.CharactersInEncounter != null)
                {
                    foreach(Character character in Modelsel.CharactersInEncounter)
                    {
                        <li>@character.Name</li>
                    }
                }
            }        
        </ul>
    </div>
</div>

<script>
    console.log(@Model.Id);
</script>

注意<input id="encounterId" name="encounterID" type="hidden" value="@Model.Id" />元素的name属性。它必须与action参数(int encounterID)同名。如果它不相同则参数绑定将不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.