ASP net core MVC Вызов различных действий в одной форме - PullRequest
0 голосов
/ 07 мая 2020

У меня это в моем контроллере:

[HttpPost]
        public IActionResult Save(int IdentifikaceZ, ReklamaceModel model)
        {
            _db.Add(model);
            _db.SaveChanges();
            return RedirectToAction("MyMainView");
        }
@using (Html.BeginForm("Save", "MyMainView", FormMethod.Post))
    {
        ....
        <input id="Insert" name="Insert" value="Insert" type="submit">
        <input id="Edit" name="Edit" value="Edit" type="submit">
    }

Мне нужно сохранить / редактировать информацию внутри формы, но я не знаю, как сказать серверу, чтобы решить, что делать. Поэтому, когда я нажимаю кнопку A или кнопку B, происходит то же самое. Мне нужно, чтобы он делал разные вещи, но с одинаковыми элементами (элементами внутри формы) Спасибо за любую помощь.

Ответы [ 4 ]

0 голосов
/ 08 мая 2020

Вот так можно сделать :::

 <form method="post" asp-controller="Home">
<a id="Insert" name="Insert" value="Insert" type="submit" asp-action="Delete" asp-route-DeleteID="@model.DeleteID"/>
 <a id="Edit" name="Edit" value="Edit" type="submit" asp-action="Edit" asp-route-DeleteID="@model.EditID"/>
</form>

[HttpPost] public IActionResult Delete(int id) {

}

[HttpPost] public IActionResult Edit(int id) {

}
0 голосов
/ 07 мая 2020

Кнопкам присвоены имена, и принцип работы названных кнопок заключается в том, что только та, по которой щелкнули, попадает в POST. Таким образом, вы можете просто проверить наличие того или иного ключа в данных формы:

if (Request.Form.ContainsKey("Insert"))
    // do insert
if (Request.Form.ContainsKey("Edit"))
    // do edit
0 голосов
/ 07 мая 2020

Операции добавления и обновления также могут выполняться с помощью одной формы и одного метода.

Добавить id как скрытый элемент управления формой, для существующих записей это поле будет иметь значение, которое является идентификатором соответствующей записи. Для новых записей значение по умолчанию будет равно 0 (при условии, что тип идентификатора int).

@using (Html.BeginForm("Save", "MyMainView", FormMethod.Post))
{
    ....

    @Html.HiddenFor(x => x.Id)

    <input type="submit" name="submit" value="Save" />
}

на бэкэнд-проверке для значения id, если оно> 0, вы запускаете обновление, в противном случае - новый рекорд.

[HttpPost]
public IActionResult Save(int IdentifikaceZ, ReklamaceModel model)
{
   if(model.Id > 0)
       _db.Update(model);
   else
       _db.Add(model);

    _db.SaveChanges();

    return RedirectToAction("MyMainView");
}

Это была упрощенная реализация, в реальном проекте вам нужно больше контролировать модель перед добавлением / обновлением. Например, рекомендуется использовать модель ввода, а затем привязать значения к модели db ...

, если вам все еще нужно использовать несколько кнопок отправки в одной форме для таргетинга на различные действия серверной части, см. Множественная отправка Кнопки для стандартной формы, а также ajax форм.

0 голосов
/ 07 мая 2020

Сначала добавьте свойство string ActionType в вашу модель ReklamaceMode.

Затем измените HTML на:

@using (Html.BeginForm("Save", "MyMainView", FormMethod.Post))
{
    ....
    <input id="Insert" name="ActionType" value="Insert" type="submit">
    <input id="Edit" name="ActionType" value="Edit" type="submit">
}

Теперь в вашем коде csharp:

[HttpPost]
public IActionResult Save(int IdentifikaceZ, ReklamaceModel model)
{
    // check model.ActionType, it will be either Insert or Edit
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...