【问题标题】:asp-for binding and route-value issues inside loop循环内的 asp-for 绑定和路由值问题
【发布时间】:2021-04-08 02:26:33
【问题描述】:

我正在建立一个小网站,用户可以在其中管理个人装备,其中包含名称和质量以及其他属性。我想在表格中显示所有这些齿轮,使用绑定到每个项目的输入框,以便用户可以根据需要更改值,然后点击编辑按钮并更新齿轮数据库。我可以让我的 foreach 循环绑定所有正确的值,但是当它路由到处理程序时,它总是将 EditGearName 和 EditGearMass 值设置为第一行中的任何值。

<table>
  @foreach (var g in Model.Gears) {
  <tr class="list-table-main">
    <td><input class="form-control" asp-for="EditGearName" value="@g.GearName" /></td>
    <td><input class="form-control" asp-for="EditGearMass" value="@g.Mass" type="number" min="0" /></td>
    <td style="width:12.5%"><button type="submit" asp-page-handler="EditGear" asp-route-groupid="@gg.ID">Save</button></td>
  </tr>
  }
</table>

这是我在按下按钮时调用的处理程序方法的示例。 GearBL.EditGear 方法是处理将其保存到数据库的代码。我知道这行得通(只要传入正确的值)

public IActionResult OnPostEditGroup(int groupid)
        {
            try
            {
                base.OnGetParent();
                if (string.IsNullOrEmpty(EditGearName))
                    throw new ValidationException("Gear name must not be empty");
                if (EditGearMass < 0)
                    throw new ValidationException("Gear mass cannot be less than 0");

                GearBL.EditGear(groupid, User, EditGearName, EditGearMass, false);

                Response.Redirect("GearList");
            }
            catch (Core.Domain.ValidationException ve)
            {
                ModelState.AddModelError("Error", ve.Message);
            }
            return Page();
        }
       

我是 asp.net/razor 的新手,因此我们将不胜感激。我什至不确定我是否有最好的方法来实现类似的东西。

【问题讨论】:

    标签: c# asp.net asp.net-core razor


    【解决方案1】:

    它总是将 EditGearName 和 EditGearMass 值设置为第一行中的任何值。

    你应该在foreach循环中添加form标签来启用一行提交。

    <table>
        <form>
        @foreach (var g in Model.Gears) {
        <tr class="list-table-main">
            <td><input class="form-control" asp-for="EditGearName" value="@g.GearName" /></td>
            <td><input class="form-control" asp-for="EditGearMass" value="@g.Mass" type="number" min="0" /></td>
            <td style="width:12.5%"><button type="submit" asp-page-handler="EditGear" asp-route-groupid="@gg.ID">Save</button></td>
        </tr>
        }
        </form>
    </table>
    

    【讨论】:

    • 我不确定它是否会传递正确的值,因为它会引发警告“元素'form'不能嵌套在元素'table'中,但它仍然有效!谢谢。
    • 会的!我还决定从表格更改为 div 标签的集合,以便它是更合适的 HTML(因为
      标签不应该在表格内)。
    • @FlippinsweetBen,是的,div 集合更合适。
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2019-11-30
    • 1970-01-01
    • 2022-01-17
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多