Как я могу получить некоторый идентификатор объекта из вида? - PullRequest
0 голосов
/ 10 июня 2019

Можно ли выполнить эти действия получения и публикации всего одной кнопкой?Я получаю идентификатор из своего представления, тогда я просто хочу запустить свое действие после публикации.

Я уже пытался получить идентификатор с параметром и поместить его в сеанс, но не смог сделать это с помощью одной кнопки отправки

    [HttpGet]
    public ActionResult JoinEvent(int id)
    {
        Session["EventID"] = id;
        return View();
    }
    [HttpPost]
    public ActionResult JoinEvent(EventPerson eventPerson)
    {
        Person per =(Person) Session["Login"];
        eventPerson.PersonID = per.PersonID;
        eventPerson.EventID = (int)Session["EventID"];
        eventPerson.TotalPerson = eventPerson.TotalPerson + 1;
        eventManager.Join(eventPerson);
        return View();
    }

и это мой взгляд

<td class="buy_link">
                            @Html.ActionLink("Join","JoinEvent","Join",item.EventID,null)                          
                        </td>

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Как вы написали здесь, похоже, что EventId может быть установлен клиентом свободно (без каких-либо ограничений безопасности), просто перейдя к GET /JoinEvent?id=100.

Если безопасность не является проблемой, вы можете сделать это многими разными способами

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

  1. Передача его как части модели EventPerson, для которой вам потребуется добавить новое свойство внутри этой модели.ActionResult должен: return View(new EventPerson { EventId: id })
  2. Украшать верхнюю строку представления (после импорта отчетов) следующим @model EventPerson, это скажет представлению, что теперь он представляет этот тип.(Который был передан действием GET)
  3. Теперь мы должны решить, хотим ли мы передать его обратно на сервер в качестве параметра строки запроса или параметра body?Поскольку мы выполняем семантическое действие «Вставить», в большинстве случаев практика просит нас передать его как часть тела.таким образом, вы должны использовать скрытое текстовое поле для передачи параметра EventId.

    @Html.Hidden("EventId", @model.EventId))

"EventId" - это свойство, которое мы хотимпривязать на нашем POST-сервере действие EventPerson новое свойство.(Точка # 1)

@model.EventId - это значение, которое мы взяли с сервера и передали в представление (Точка # 2)

0 голосов
/ 10 июня 2019

Технически вы не можете.Когда вы создаете тег привязки, используя ссылку действия, он создает ссылку на указанный URL-адрес.При нажатии на эту ссылку, которая запускает запрос GET.Это не будет отправлять данные в метод действия.Если вам нужно отправить данные POST, вам нужно либо отправить форму, либо вы можете использовать Javascript / jQuery для этого.Вы можете собрать данные и отправить их как POST, используя Js / jQuery.Но только якорь не отправит метод POST.

См. this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...