Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 如何将页面模型对象属性连接到<;中的对象列表(来自db);选择>;标签?ASP.NET剃须刀页面_Forms_Asp.net Core_Dropdown_Razor Pages_Property Binding - Fatal编程技术网

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"