Nano Hash - криптовалюты, майнинг, программирование

Метод действия не работал с атрибутом [HttpPost] в asp.net MVC

Чтобы удалить данные в asp.net MVC 5 с помощью Razor Engine, я написал этот код, который отлично работает. Однако я хочу присвоить ему атрибут [HttpPost], но если я его добавлю, действие не сработает.

Кто-нибудь может мне помочь? В чем проблема?

У меня есть только одно действие с именем delete, мне не нужно другое действие Delete с атрибутом [HttpGet]. Как я могу это исправить?

Repositories.cs

public bool Delete(int id, bool autoSave = true)
    {
        try
        {
            var entity = db.Carousels.Find(id);
            db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
            if (autoSave)
                return Convert.ToBoolean(db.SaveChanges());
            else
                return false;
        }
        catch
        {
            return false;
        }
    }

Контроллер администратора

public ActionResult DeleteCarousel(int id)
    {
        CarouselRepositories blCarousel = new CarouselRepositories();
        blCarousel.Delete(id);
        return View("ShowCarousel", blCarousel.Select());
    }

ShowCarousel.cshtml

@model IEnumerable<NP1.Models.Carousel>

@{
ViewBag.Title = "ShowCarousel";
Layout = "~/Views/Admin/AdminLayout.cshtml";
}


 <table class="table">
 <tr>
    <th>
        @Html.DisplayNameFor(model => model.CarouselSubject)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.CarouselInfo)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.CarouselImage)
    </th>
    <th></th>
 </tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.CarouselSubject)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.CarouselInfo)
    </td>
    <td>
        @*@Html.DisplayFor(modelItem => item.CarouselImage)*@
        <img style="width:300px; height:200px;" src="~/Images/Carousel/@item.CarouselImage" />
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.CarouselID }) |
        @Html.ActionLink("Delete", "DeleteCarousel", new { id = item.CarouselID })
    </td>
</tr>
 }

</table>

  • Ваш Delete() метод по умолчанию [HttpGet]. Если вы хотите, чтобы он попадал при отправке формы, вам нужно пометить его [HttpPost] 09.01.2016
  • Я отметил это, но это не сработало! , следует ли изменить метод удаления? @СтивенМюке 09.01.2016
  • Нет, метод Delete() должен быть POST (его изменяющиеся данные). Если его не бьют, ваша точка зрения неверна. Вы должны показать это. 09.01.2016
  • Я обновил свой пост, у меня нет представления для удаления данных, это правда?! @СтивенМюке 09.01.2016
  • Вам нужно заменить @Html.ActionLink("Delete", .... ) формой и кнопкой отправки 09.01.2016
  • Извините, я не знаю, как это сделать. Я добавил @Html.ActionLink("Delete", "DeleteCarousel", new { id = item.CarouselID }, new { onclick = "return confirm('Are you sure to delete it ?')" }) , но это еще не сработало. не могли бы вы привести пример? Я понятия не имею, как написать форму в таблице:/, извините, @StephenMuecke 09.01.2016

Ответы:


1

Отметьте свой метод атрибутом [HttpPost]

[HttpPost]
public ActionResult DeleteCarousel(int id)
{
  ....
}

и измените представление, чтобы использовать форму, а не ActionLink()

@foreach (var item in Model)
{
  <tr>
    <td>@Html.DisplayFor(m => item.CarouselSubject)</td>
    ....
    <td>
        @using (Html.BeginForm("DeleteCarousel", "yourControllerName", new { id = item.CarouselID }, FormMethod.Post))
        {
          <input type="submit" value="Delete" /> // style it look like a link if you want
        }
    </td>
  </tr>
}

Если вы также хотите получить подтверждающее сообщение перед удалением, добавьте следующий скрипт jquery (отправка формы будет отменена, если пользователь нажмет Cancel или закроет диалоговое окно, не нажимая OK)

$('form').submit(function() {
  return confirm('Are you sure to delete it?');
})
09.01.2016
  • Только что заметил из вашего последнего комментария, что вам также нужно сообщение с подтверждением - я немного позже обновлю ответ кодом jquery, чтобы справиться с этим. 09.01.2016
  • Да, ты прав, мне тоже нужно сообщение с подтверждением. Еще раз спасибо 09.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..