使用Core 2.2更新模型

时间:2019-05-02 15:10:01

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

如何使用最新的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!

1 个答案:

答案 0 :(得分:0)

  

您如何处理详细信息页面中的ID

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

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

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