Forms 如何将页面模型对象属性连接到<;中的对象列表(来自db);选择>;标签?ASP.NET剃须刀页面
武器型号:Forms 如何将页面模型对象属性连接到<;中的对象列表(来自db);选择>;标签?ASP.NET剃须刀页面,forms,asp.net-core,dropdown,razor-pages,property-binding,Forms,Asp.net Core,Dropdown,Razor Pages,Property Binding,武器型号: public class Weapon { public int Id { get; set; } public string Name { get; set; } public int BaseDamage { get; set; } // base damage with average attack public int MagicDamage { get; set; } public int Ac
public class Weapon {
public int Id { get; set; }
public string Name { get; set; }
public int BaseDamage { get; set; } // base damage with average attack
public int MagicDamage { get; set; }
public int ActionCost { get; set; }
public int HitChance { get; set; }
}
生物模型包含一些简单的属性,比如Id和武器
我正在尝试从数据库中创建武器下拉列表,并在通过按钮提交表单时将所选武器添加到生物对象中
页面模型包含生物对象和武器列表:
public Creature Creature { get; set; }
public IEnumerable<Weapon> Weapons { get; set; }
第一个想法:
<form method="post">
<input type="hidden" asp-for="Creature.Id"/>
<select id="weapon" class="form-control bg-secondary text-light" asp-for="Creature.Weapon" asp-items="@Model.Weapons">
</select>
<button type="submit" class="btn btn-outline-warning m-2" asp-page-handler="UpdateWeapon">Wybierz</button>
</form>
威比尔兹
但是VS不接受asp items=“@Model.warms”:CS0266:无法将类型“System.Collection.Generic.IEnumerable”隐式转换为“System.Collections.GenericEnumerable”。存在明确的对话(您是否缺少演员阵容?) 第二个想法(更新[以前的版本有value=“@item.Id]”):
@foreach(Model.wearms中的变量项){
@item.Name-@item.BaseDamage@item.MagicDamage@item.ActionCost PA@item.HitChance%
}
威比尔兹
还是不行。不要抛出错误,但生物。武器仍然为空,不会从选择列表中传递
后方法:
public async Task<IActionResult> OnPostUpdateWeaponAsync() {
var item = _ctx.Creatures.Find(Creature.Id);
if (item == null)
{
return RedirectToPage("Creature");
}
if (Creature.Weapon == null)
{
return RedirectToPage("Creature");
}
await new EditCreature(_ctx).UpdateWeapon(Creature);
return RedirectToPage("Creature");
}
公共异步任务OnPostUpdateWeaponAsync(){
变量项=_ctx.bioters.Find(bioter.Id);
如果(项==null)
{
返回顶部(“生物”);
}
如果(生物武器==null)
{
返回顶部(“生物”);
}
等待新的编辑生物(_ctx)。更新生物;
返回顶部(“生物”);
}
生物模型:武器型号: 页码:
和
第二个想法:
<form method="post">
<input type="hidden" asp-for="Creature.Id" />
<select id="weapon" class="form-control bg-secondary text-light" asp-for="Creature.Weapon">
@foreach (var item in Model.Weapons)
{
<option value="@item.Id">@item.Name - @item.BaseDamage | @item.MagicDamage | @item.ActionCost PA | @item.HitChance%</option>
}
</select>
<button type="submit" class="btn btn-outline-warning m-2" asp-page-handler="UpdateWeapon">Wybierz</button>
</form>
到
你说得对,但我又犯了一个错误。这是以前实验的遗留物。如果我照你说的做,武器ID就会成功通过。最初,我想转移整个对象,而不是一个属性。是否可以传递整个对象,或者需要在代码隐藏中进行变通?我更新了我的2想法。@Mlorism恐怕您不能将整个实体放入选择选项值中。如果武器数据已经被保存,我想你可以在代码中完成,通过Id从数据库中获取武器数据,然后更新。好的,谢谢你的回答和帮助。我会这样做的。
public async Task<IActionResult> OnPostUpdateWeaponAsync() {
var item = _ctx.Creatures.Find(Creature.Id);
if (item == null)
{
return RedirectToPage("Creature");
}
if (Creature.Weapon == null)
{
return RedirectToPage("Creature");
}
await new EditCreature(_ctx).UpdateWeapon(Creature);
return RedirectToPage("Creature");
}
<form method="post">
<input type="hidden" asp-for="Creature.Id" />
<select id="weapon" class="form-control bg-secondary text-light" asp-for="Creature.Weapon">
@foreach (var item in Model.Weapons)
{
<option value="@item.Id">@item.Name - @item.BaseDamage | @item.MagicDamage | @item.ActionCost PA | @item.HitChance%</option>
}
</select>
<button type="submit" class="btn btn-outline-warning m-2" asp-page-handler="UpdateWeapon">Wybierz</button>
</form>
asp-for="Creature.Weapon"
asp-for="Creature.Weapon.Id"