我的视图中的表单没有返回模型的正确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; }
}
只有具有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
)同名。如果它不相同则参数绑定将不起作用。