ASP.NET MVC ActionLink и метод post

Может ли кто-нибудь сказать мне, как я могу представить значения Контроллеру, используя ActionLink и метод POST?
Я не хочу использовать кнопки.
Я думаю, у него есть что-то с jquery.

Вы не можете использовать ActionLink потому что это просто отображает якорный тег .
Вы можете использовать пост jQuery AJAX .
Или просто вызовите метод отправки формы с помощью jQuery или без него (что было бы не AJAX), возможно, в событии onclick какого-либо элемента управления требуется ваше воображение.

Если вы используете ASP MVC3, вы можете использовать Ajax.ActionLink (), который позволяет указать HTTP-метод, который вы можете установить на «POST».

Вы можете использовать jQuery для выполнения POST для всех ваших кнопок. Просто дайте им то же имя CssClass.

Используйте «return false»; в конце вашего события onclick javascript, если вы хотите сделать серверную команду RedirectToAction после публикации, иначе просто верните представление.

Код бритвы

 @using (Html.BeginForm()) { @Html.HiddenFor(model => model.ID) @Html.ActionLink("Save", "SaveAction", "MainController", null, new { @class = "saveButton", onclick = "return false;" }) } 

Код JQuery

 $(document).ready(function () { $('.saveButton').click(function () { $(this).closest('form')[0].submit(); }); }); 

C #

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult SaveAction(SaveViewModel model) { // Save code here... return RedirectToAction("Index"); //return View(model); } 

@Aidos имел правильный ответ, просто хотел прояснить его, поскольку он скрыт внутри комментария на его пост, сделанный @CodingWithSpike.

 @Ajax.ActionLink("Delete", "Delete", new { id = item.ApkModelId }, new AjaxOptions { HttpMethod = "POST" }) 

ActionLink никогда не будет запускать почту. Он всегда вызывает запрос GET.

Здесь был ответ, испеченный в проект ASP.NET MVC по умолчанию, который, как мне кажется, хорошо меняет мои стилистические цели в пользовательском интерфейсе. Форма передается с использованием чистого javascript в некоторую содержащую форму.

 @using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) {  Sign out  } 

Полностью показанный вариант использования – это выпадающее меню выхода на панели навигации веб-приложения.

 @using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" })) { @Html.AntiForgeryToken()  } 

Используйте ссылку «Вызовите действие»:

 <%= Html.ActionLink("Click Here" , "ActionName","ContorllerName" )%> 

Для представления значений формы используйте:

  <% using (Html.BeginForm("CustomerSearchResults", "Customer")) { %>   <% } %> 

Он отправит данные в клиентский controller и действие CustomerSearchResults.

Используйте эту ссылку внутри Ajax.BeginForm

 @Html.ActionLink( "Save", "SaveAction", null, null, onclick = "$(this).parents('form').attr('action', $(this).attr('href'));$(this).parents('form').submit();return false;" }) 

😉

Мое решение этой проблемы довольно простое. У меня есть страница, которая выполняет поиск по клиенту по всему электронному адресу, а другая частичным, частичным вытягивает и отображает список. В списке есть ссылка на действие, которая указывает на actionresult под названием GetByID и передает идентификатор

GetByID извлекает данные для выбранного клиента, а затем возвращает

 return View("Index", model); 

который является почтовым методом

Это была трудная проблема для меня. Как создать динамическую ссылку в бритве и html, которая может вызвать метод действия и передать значение или значения конкретному методу действий? Я рассмотрел несколько вариантов, включая пользовательский html-помощник. Я просто придумал простое и элегантное решение.

Вид

 @model IEnumerable @using (Html.BeginForm()) {  @foreach (Product p in Model.Products) {  } 
Name Price Quantity
@p.Name @p.Price.ToString() @p.Quantity.ToString()
}

Метод действия

 public ViewResult Edit(Product prod) { ContextDB contextDB = new ContextDB(); Product product = contextDB.Products.Single(p => p.ProductID == prod.ProductId); product = prod; contextDB.SaveChanges(); return View("Edit"); } 

Дело здесь в том, что Url.Action не волнует, является ли метод действия GET или POST. Он получит доступ к любому типу метода. Вы можете передать свои данные методу действия, используя

 https://stackoverflow.com/questions/2048778/asp-net-mvc-actionlink-and-post-method/@Url.Action(string actionName, string controllerName, object routeValues) 

объект routeValues. Я пробовал это, и он работает. Нет, вы не занимаетесь техническим заданием или не отправляете форму, но если объект routeValues ​​содержит ваши данные, это не имеет значения, если это сообщение или получение. Вы можете использовать конкретную подпись метода действия, чтобы выбрать правильный метод.

Это мое решение проблемы. Это controller с двумя методами действий

 public class FeedbackController : Controller { public ActionResult Index() { var feedbacks =dataFromSomeSource.getData; return View(feedbacks); } [System.Web.Mvc.HttpDelete] [System.Web.Mvc.Authorize(Roles = "admin")] public ActionResult Delete([FromBody]int id) { return RedirectToAction("Index"); } } 

В представлении я создаю конструкцию следующей структуры.

  ..   @using (Html.BeginForm("Delete", "Feedback", FormMethod.Post, new { id = "myForm" })) { @Html.HttpMethodOverride(HttpVerbs.Delete) @Html.Hidden("id",null,new{id="idField"}) foreach (var feedback in @Model) { if (User.Identity.IsAuthenticated && User.IsInRole("admin")) { @Html.ActionLink("Delete Item", "", new { id = @feedback.Id }, new { onClick = "confirmDelete("+feedback.Id+");return false;" }) } } ...  

Точка зрения в Razor Вид :

  1. Функция JavaScript confirmDelete(id) вызываемая при нажатии ссылки, сгенерированной с помощью @Html.ActionLink ;

  2. confirmDelete() требуется, чтобы идентификатор элемента был нажат. Этот элемент передается из обработчика confirmDelete("+feedback.Id+");return false; Обратите внимание, обработчик возвращает false, чтобы предотвратить действие по умолчанию – это запрос на получение цели. Событие OnClick для кнопок может быть подключено с помощью jQuery для всех кнопок в списке в качестве альтернативы (возможно, это будет еще лучше, так как это будет меньше текста на странице HTML, и данные могут быть переданы через атрибут data).

  3. Форма имеет id=myForm , чтобы найти ее в confirmDelete() .

  4. Форма включает @Html.HttpMethodOverride(HttpVerbs.Delete) , чтобы использовать глагол HttpDelete , как действие, помеченное HttpDeleteAttribute .

  5. В JS-функции я использую подтверждение действия (с помощью внешнего плагина, но стандартное подтверждение также отлично работает. Не забудьте использовать bind() в обратном вызове или var that=this (независимо от того, что вы предпочитаете).

  6. Форма имеет скрытый элемент с id='idField' и name='id' . Поэтому перед отправкой формы после подтверждения ( result==true ) значение скрытого элемента устанавливается равным значению переданного аргумента, и браузер передает данные в controller следующим образом:

URL-адрес запроса : http://localhost:38874/Feedback/Delete

Метод запроса : POST Код состояния: 302 Найдено

Заголовки ответов

Расположение: / Обратная связь Хост: localhost: 38874 Данные формы X-HTTP-метод-переопределение: DELETE id: 5

Как вы видите, это запрос POST с помощью метода X-HTTP-Method-Override: DELETE и данные в теле, установленном на «id: 5». В ответе есть код 302, который перенаправляет действие индекса, тем самым вы обновляете свой экран после удаления.

Для отправки POST вам необходимо отправить данные формы. Я не думаю, что это возможно сделать с помощью ActionLink. Проверьте эту ссылку .

Я бы рекомендовал оставаться чистым для принципов REST и использовать HTTP-удаление для ваших удалений. К сожалению, спецификации HTML имеют только HTTP Get & Post. Тег может только HTTP Get. Тег формы может выполнять HTTP Get или Post. К счастью, если вы используете ajax, вы можете сделать HTTP Delete, и это то, что я рекомендую. Более подробную информацию см. В следующем сообщении: Http Deletes

Я сделал ту же проблему, используя следующий код:

 @using (Html.BeginForm("Delete", "Admin")) { @Html.Hidden("ProductID", item.ProductID)  } 

Вызов $ .post () не будет работать, поскольку он основан на Ajax. Поэтому для этой цели необходимо использовать гибридный метод.

Следующее – это решение, которое работает для меня.

Шаги: 1. Создайте URL-адрес для href, который вызывает метод с url и параметром 2. Позвоните обычным POST с использованием метода JavaScript

Решение:

В .cshtml:

 View 

Примечание: анонимный метод должен быть завернут в (….) () т.е.

 (function() { //code... })(); 

postGo определяется как указано в JavaScript. Отдых прост ..

@ Url.Action («Вид») создает URL-адрес для вызова

{‘id’: @ receipt.ReceiptId} создает параметры как объект, который в свою очередь преобразуется в поля POST в методе postGo. Это может быть любой параметр по мере необходимости

В JavaScript:

 (function ($) { $.extend({ getGo: function (url, params) { document.location = url + '?' + $.param(params); }, postGo: function (url, params) { var $form = $("
") .attr("method", "post") .attr("action", url); $.each(params, function (name, value) { $("") .attr("name", name) .attr("value", value) .appendTo($form); }); $form.appendTo("body"); $form.submit(); } }); })(jQuery);

URL ссылок, которые я использовал для postGo

Не-ajax GET / POST с использованием jQuery (плагин?)

http://nuonical.com/jquery-postgo-plugin/

jQuery.post() будет работать, если у вас есть пользовательские данные. Если вы хотите опубликовать существующую форму, проще использовать ajaxSubmit() .

И вам не нужно настраивать этот код в самой ActionLink , так как вы можете присоединить обработчик ссылок в событии document.ready() (что в любом случае является предпочтительным методом), например, используя $(function(){ ... }) трюк jQuery.

Для этого понадобилось POST с страницы поиска (указателя) на страницу результатов. Мне не нужно столько, сколько сказал Виталий, но он указал мне в правильном направлении. Все, что я должен был сделать, это:

 @using (Html.BeginForm("Result", "Search", FormMethod.Post)) { 
Search Term:

}

Мой controller имел следующий метод подписи:

 [HttpPost] public async Task Result(string k) 
  • Где я могу найти DLL System.Linq.Dynamic?
  • C # Entity-Framework: как я могу объединить .Find и .Include в объекте модели?
  • ASP.NET MVC: пользовательская проверка по DataAnnotation
  • ASP.NET MVC - найти абсолютный путь к папке App_Data из controllerа
  • Как заблокировать пути в ASP.NET MVC?
  • Html5 Заполнители с .NET MVC 3 Razor EditorДля расширения?
  • Как вы перенаправляетесь на страницу с помощью глагола POST?
  • Не удается найти шаблон модели данных Entity Data ADO.net в VS2017
  • Проекты NUnit vs Visual Studio 2008 для тестирования модhive?
  • ASP.NET MVC Ajax.ActionLink с изображением
  • Можно ли создать общий метод @helper с помощью Razor?
  • Давайте будем гением компьютера.