1 Вопрос: Обновление модели с помощью Core 2.2

вопрос создан в Thu, May 2, 2019 12:00 AM

Как вы обрабатываете идентификатор на странице сведений с помощью новейшей технологии ASP.NET Core 2.2?

Если я использую скрытое поле с идентификатором, оно пропускается, когда я нажимаю кнопку Сохранить. Но когда я комментирую это, я не получу 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!

    
0
  1. идентификатор существует только после сохранения записи в базе данных
    2019-05-02 15: 12: 21Z
  2. Я забыл упомянуть, что это для обновления существующей модели
    2019-05-02 15: 24: 51Z
1 ответ                              1                         
  

Как вы справляетесь с идентификатором на странице подробностей

Если предположить, что это страница «редактирования» для сущности, которая уже существует в базе данных, то вы можете использовать следующие параметры:

  • Сохраните его в скрытом поле, чтобы оно было включено в POST.
  • Используйте его в качестве параметра пути URI или параметра строки запроса
    • например. GET /users/{userId} и PSOT /users/{userId} или GET /users?userId={userId} и POST /users?userId={userId}
  • Если значение Id может быть определено из текущего запроса (например, на основе безопасности User Claim или чего-либо в состоянии сеанса), используйте это.

Если это страница для определения данных для новой сущности, которая еще не существует (при условии, что вы используете IDENTITY/AUTO_INCREMENT), то это не имеет значения, поскольку вы все равно будете выполнять операцию INSERT, и вы в любом случае должен иметь отдельный путь URI (и действие контроллера) для этой операции (т. е. ваш код не ожидает и не требует никакого идентификатора сущности в этом сценарии).

    
0
2019-05-02 15: 15: 14Z
  1. так, как мой пример кода, скрыть поле идентификатора. Но правильное ли это решение?
    2019-05-02 18: 00: 07Z
  2. @ user11208424 Да, просто убедитесь, что вы добавили проверки разрешений, чтобы пользователи не могли обновлять сущности, к которым им нельзя разрешать.
    2019-05-02 18: 08: 18Z
источник размещен Вот