我的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);
}
答案 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
)同名。如果它不相同,则参数绑定将不起作用。