【问题标题】:Updating model with Core 2.2使用 Core 2.2 更新模型
【发布时间】:2019-09-21 03:34:47
【问题描述】:

如何使用最新的 ASP.NET Core 2.2 技术处理详细信息页面中的 Id?

如果我使用带有 ID 的隐藏字段,当我点击保存时它会被传递。 但是当我评论它时,我不会得到 ID。

<form asp-controller="Coach" asp-action="UpdateCoach" method="post">
@*<input asp-for="Coach.Id" type="hidden" />*@
<table class="table table-bordered table-condensed">
    <tr>
        <td>Naam:</td>
        <td><input asp-for="Coach.CoachName" value="@Model.Coach.CoachName" /></td>
    </tr>
    <tr>
        <td>Type coach:</td>
        <td>
            <select asp-for="Coach.CoachTypeId" asp-items="@(new SelectList(Model.CoachTypes,"Id", "CoachTypeDescription"))">
                <option></option>
            </select>
        </td>
    </tr>
    <tr>
        <td>Telefoon:</td>
        <td><input asp-for="Coach.CoachPhone" value="@Model.Coach.CoachPhone" /></td>
    </tr>
    <tr>
        <td>Email:</td>
        <td><input asp-for="Coach.CoachEmail" value="@Model.Coach.CoachEmail" /></td>
    </tr>
</table>

<input type="submit" value="Opslagen" class="btn btn-default" />

这是我的控制器:

 [HttpPost]
    public async Task<IActionResult> UpdateCoach(CoachViewModel coachViewModel)

    {
        return Redirect("/Coach/Coach");
    }

在 coachViewModel 中,我得到除 Id 之外的所有值!

【问题讨论】:

  • 记录存入数据库后id才存在
  • 我忘了说这是为了更新现有模型

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


【解决方案1】:

如何处理详情页中的Id

假设这是一个已存在于数据库中的实体的“编辑”页面,那么您的选项包括:

  • 将其存储在隐藏字段中,以便包含在 POST 中。
  • 将其用作 URI 路径参数或查询字符串参数
    • 例如GET /users/{userId}PSOT /users/{userId}GET /users?userId={userId}POST /users?userId={userId}
  • 如果可以根据当前请求确定 Id 值(例如,基于 User 的安全性 Claim 或会话状态中的某些内容),则使用它。

如果这是一个为尚不存在的新实体定义数据的页面(假设您使用的是IDENTITY/AUTO_INCREMENT),那么没关系,因为您将使用@ 987654330@ 操作无论如何,您应该有一个单独的 URI 路径(和控制器操作)用于此操作(即,因此您的代码在这种情况下不需要也不需要任何实体标识符)。

【讨论】:

  • 所以作为我的示例代码,隐藏 ID 字段。但这是一个合适的解决方案吗?
  • @user11208424 是的,只要确保添加权限检查以防止用户更新他们不应被允许的实体。
猜你喜欢
  • 2019-10-03
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2019-09-28
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多