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

时间:2018-03-15 18:35:54

标签: asp.net-mvc razor asp.net-core

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

以下是观点:

npm install --save-dev laravel-mix-template-minifier



// webpack.mix.js
let mix = require('laravel-mix');

mix.minTemplate = require('laravel-mix-template-minifier')

if (mix.inProduction()) {
  mix.minTemplate('storage/framework/views/*.php', 'storage/framework/views/')
}

相关行动方法:

@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);
        }

1 个答案:

答案 0 :(得分:0)

只有具有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" />元素的名称属性。它必须与action参数(int encounterID)同名。如果它不相同,则参数绑定将不起作用。