Может ли кто-нибудь сказать мне, как я могу отправлять значения контроллеру с помощью ActionLink и метода POST?
Я не хочу использовать кнопки.
У меня есть что-то с jquery.
ASP.NET MVC ActionLink и метод post
ответ
Вы не можете использовать ActionLink
, потому что это просто делает якорь <a>
тегом.
Вы можете использовать jQuery AJAX post.
Или просто вызовите метод отправки формы с помощью jQuery или без него (возможно, это будет не AJAX), возможно, в событии onclick
какого-либо элемента управления берет ваше воображение.
Для того, чтобы отправить сообщение, Вам необходимо отправить данные формы. Я не думаю, что это возможно сделать с помощью ActionLink. Выезд this link.
jQuery.post()
будет работать, если у вас есть пользовательские данные. Если вы хотите опубликовать существующую форму, проще использовать ajaxSubmit()
.
И вы не должны установить этот код в самом ActionLink
, так как вы можете прикрепить обработчик ссылок в document.ready()
случае (что является предпочтительным способом в любом случае), например, с помощью $(function(){ ... })
JQuery трюк.
Используйте следующую Зов Акция Link:
<%= Html.ActionLink("Click Here" , "ActionName","ContorllerName")%>
Для представления значения формы использования:
<% using (Html.BeginForm("CustomerSearchResults", "Customer"))
{ %>
<input type="text" id="Name" />
<input type="submit" class="dASButton" value="Submit" />
<% } %>
Он представит данные в контроллер клиента и CustomerSearchResults действий.
ActionLink никогда не будет стрелять по почте. Он всегда вызывает запрос GET.
Если вы используете ASP MVC3, вы можете использовать Ajax.ActionLink(), который позволяет указать HTTP-метод, который вы можете установить на «POST».
Обратите внимание, что для выполнения этой работы вам нужно будет включить один из javascript ajax файлы, например "jquery.unobtrusive-ajax.min.js'". В противном случае он будет продолжать делать GET вместо POST при нажатии. Синтаксис, чтобы ссылка была такой: '@ Ajax.ActionLink (« Удалить »,« Удалить », новый {id = item.Id}, новый AjaxOptions {HttpMethod =" POST "})' – CodingWithSpike
ненавязчивый ajax отлично работал, но я пришлось использовать ссылку на действие немного иначе, передав параметр «Словарь как параметр» вместо этого объекта AjaxOptions: http://stackoverflow.com/a/10657891/429521 Кроме того, мне пришлось передать атрибуты ajax вручную, чтобы JS мог catch и переопределять события кликов, они были «data-ajax» = «true», «data-ajax-url» =
@FelipeSabino, ссылка, которую вы предоставили, теперь сломана. – CokoBWare
Я бы порекомендовал оставаться чистым для принципов REST и использовать удаление HTTP для ваших удалений. К сожалению, спецификации HTML имеют только HTTP Get & Post. Тег может только HTTP Get. Тег формы может выполнять HTTP Get или Post. К счастью, если вы используете ajax, вы можете сделать HTTP Delete, и это то, что я рекомендую. Смотрите следующий пост для деталей: Http Deletes
Используйте эту ссылку внутри Ajax.BeginForm
@Html.ActionLink(
"Save",
"SaveAction",
null,
null,
onclick = "$(this).parents('form').attr('action', $(this).attr('href'));$(this).parents('form').submit();return false;" })
;)
Мое решение этой проблемы является довольно простым. У меня есть страница, которая выполняет поиск клиента по всему электронному адресу, а другая частичным, частичным вытягивает и отображает список, в списке которого есть ссылка действия, которая указывает на действие, вызванное GetByID, и проходит по идентификатору
GetByID тянет данные для выбранного клиента возвращает
return View("Index", model);
, который является метод столба
Это было трудной проблемой для меня, чтобы решить.Как создать динамическую ссылку в бритве и html, которая может вызвать метод действия и передать значение или значения конкретному методу действий? Я рассмотрел несколько вариантов, включая пользовательский html-помощник. Я просто придумал простое и элегантное решение.
Вид
@model IEnumerable<MyMvcApp.Models.Product>
@using (Html.BeginForm()) {
<table>
<thead>
<tr>
<td>Name</td>
<td>Price</td>
<td>Quantity</td>
</tr>
</thead>
@foreach (Product p in Model.Products)
{
<tr>
<td><a href="@Url.Action("Edit", "Product", p)">@p.Name</a></td>
<td>@p.Price.ToString()</td>
<td>@p.Quantity.ToString()</td>
</tr>
}
</table>
}
Метод действия
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. Он получит доступ к любому типу метода. Вы можете передать свои данные методу действия, используя
@Url.Action(string actionName, string controllerName, object routeValues)
routeValues объект. Я пробовал это, и он работает. Нет, вы не занимаетесь техническим заданием или не отправляете форму, но если объект routeValues содержит ваши данные, это не имеет значения, если это сообщение или получение. Вы можете использовать конкретную подпись метода действия, чтобы выбрать правильный метод.
Я попробовал ваш образец, и браузер отправляет GET на сервер, даже форма имеет тип Post. Если actionMethod в контроллере имеет атрибут [HttpPost], запрос не выполняется, поскольку маршрут не найден. –
Вы можете использовать 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);
}
Я думал, что он ясно дал понять, что не хочет использовать кнопки? – goodies4uall
@ goodies4uall Действительно, и этот ответ делает именно это.:) Класс CSS называется «saveButton» (возможно, вводящее в заблуждение имя), но для запуска действия используется тег привязки – Savantes
@Aidos был правильный ответ просто хотел, чтобы понять, так как он скрыт внутри комментария на его сообщение сделало @CodingWithSpike.
@Ajax.ActionLink("Delete", "Delete", new { id = item.ApkModelId }, new AjaxOptions { HttpMethod = "POST" })
Я сделал тот же вопрос, используя следующий код:
@using (Html.BeginForm("Delete", "Admin"))
{
@Html.Hidden("ProductID", item.ProductID)
<input type="submit" value="Delete" />
}
Если у вас много элементов на странице, вам нужно будет обернуть каждую из них в форму и как результатом будет сформировано много форм. Также отображает кнопку, а не ссылку. –
@VitaliyMarkitanov Вы предлагаете использовать jQuery ajax? – isxaker
Посмотрите на мое сообщение ниже в этой теме, я объяснил свое решение там. –
Calling $ .post() не будет работать, так как он основан Ajax. Поэтому для этой цели необходимо использовать гибридный метод.
Следующее решение, которое работает для меня.
шаги: 1. Создание URL для HREF который вызывает метод с URL и параметра 2. Вызвать нормальный POST с помощью метода JavaScript
Решение:
В .cshtml:
<a href="javascript:(function(){$.postGo('@Url.Action("View")', { 'id': @receipt.ReceiptId });})()">View</a>
Примечание: анонимный метод следует обернуть (...)() т.е.
(function() {
//code...
})();
postGo приведено ниже в JavaScript. Отдых прост ..
@ Url.Action ("View") создает URL для вызова
{ 'ID': @ receipt.ReceiptId} создает параметры, как объект, который в свою очередь, преобразуется в POST поля postGo метод. Это может быть любой параметр, как вам требуется
В JavaScript:
(function ($) {
$.extend({
getGo: function (url, params) {
document.location = url + '?' + $.param(params);
},
postGo: function (url, params) {
var $form = $("<form>")
.attr("method", "post")
.attr("action", url);
$.each(params, function (name, value) {
$("<input type='hidden'>")
.attr("name", name)
.attr("value", value)
.appendTo($form);
});
$form.appendTo("body");
$form.submit();
}
});
})(jQuery);
Reference URL-адреса, которые я использовал для postGo
Это мое решение для проблема. Это контроллер с 2 методами действий
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");
}
}
Ввиду Оказываю построить следующую структуру.
<html>
..
<script src="~/Scripts/bootbox.min.js"></script>
<script>
function confirmDelete(id) {
bootbox.confirm('@Resources.Resource.AreYouSure', function(result) {
if (result) {
document.getElementById('idField').value = id;
document.getElementById('myForm').submit();
}
}.bind(this));
}
</script>
@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;" })
}
}
...
</html>
Точка интереса Razor View:
функция JavaScript
confirmDelete(id)
, который вызывается, когда связь создается с@Html.ActionLink
щелкают;confirmDelete()
функция требуется идентификатор предмета щелкнув. Этот элемент передается отonClick
handlerconfirmDelete("+feedback.Id+");return false;
Обратите внимание, обработчик возвращает false, чтобы предотвратить действие по умолчанию - это запрос на получение цели.OnClick
Событие для кнопок может быть прикреплено с помощью jQuery для всех кнопок в списке как альтернативное (возможно, оно будет еще лучше, так как это будет меньше текста на странице HTML, и данные могут быть переданы через атрибутdata-
).Форма имеет
id=myForm
, чтобы найти ее вconfirmDelete()
.Форма содержит
@Html.HttpMethodOverride(HttpVerbs.Delete)
, чтобы использовать глаголHttpDelete
как действие, обозначенное знакомHttpDeleteAttribute
.В функции JS я использую подтверждение действия (с помощью внешнего плагина, но стандарт подтверждения работает тоже хорошо. Не забывайте использовать
bind()
в обратном вызове илиvar that=this
(все, что вы предпочитаете).Форма имеет скрытый элемент с
id='idField'
иname='id'
.Поэтому до того, как форма будет отправлена после подтверждения (result==true
), значение скрытого элемента устанавливается на значение аргумента передается и браузер будет представлять данные в контроллер, как это:
URL запроса: http://localhost:38874/Feedback/Delete
Запрос Метод: Код POST Статус: 302 Найдено
Response Headers
Расположение:/Обратная связь Ведущий: локальный: 38874 Form Data X-HTTP-Method-Override: DELETE ID: 5
Как вы видите, что это запрос POST с X-HTTP-Method-Override: DELETE и данные в теле, установленном на «id: 5». В ответе есть код 302, который перенаправляет действие индекса, тем самым вы обновляете свой экран после удаления.
Поступил через этот запрос на POST с страницы поиска (указателя) на страницу результатов. Мне не нужно столько, сколько сказал Виталий, но он указал мне в правильном направлении. Все, что я должен был сделать это:
@using (Html.BeginForm("Result", "Search", FormMethod.Post)) {
<div class="row">
<div class="col-md-4">
<div class="field">Search Term:</div>
<input id="k" name="k" type="text" placeholder="Search" />
</div>
</div>
<br />
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-default">Search</button>
</div>
</div>
}
Мой контроллер имел следующий сигнатурный метод:
[HttpPost]
public async Task<ActionResult> Result(string k)
Здесь был ответ запеченный в ASP.NET MVC по умолчанию 5 проекта я считаю, что выполняет свой стиль цели приятно в пользовательском интерфейсе. Форма передается с использованием чистого javascript в некоторую содержащую форму.
@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
<a href="javascript:document.getElementById('logoutForm').submit()">
<span>Sign out</span>
</a>
}
Полностью указанный пример использования - это выпадающее меню выхода на панели навигации веб-приложения.
@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<div class="dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="ma-nav-text ma-account-name">@User.Identity.Name</span>
<i class="material-icons md-36 text-inverse">person</i>
</button>
<ul class="dropdown-menu dropdown-menu-right ma-dropdown-tray">
<li>
<a href="javascript:document.getElementById('logoutForm').submit()">
<i class="material-icons">system_update_alt</i>
<span>Sign out</span>
</a>
</li>
</ul>
</div>
}
- 1. ASP.NET MVC трудности ActionLink
- 2. Asp.Net MVC ActionLink
- 3. ASP.NET MVC ActionLink
- 4. ASP.Net MVC ActionLink
- 5. ASP.NET MVC RAZOR ActionLink нажмите
- 6. Области ASP.NET MVC - ActionLink и RedirectToAction
- 7. ASP.NET MVC: Razor ActionLink Issue
- 8. ASP.NET MVC ActionLink вне зоны
- 9. Как работает ASP.Net MVC ActionLink?
- 10. ASP.NET MVC ActionLink оказывает ошибочно
- 11. Возврат bool из представления/ActionLink в метод - Asp.Net MVC
- 12. HtmlHelper ActionLink опускает область (ASP.NET MVC 4)
- 13. Asp.NET MVC 4 Ajax ActionLink необходима помощь
- 14. MVC MapPageRoute и ActionLink
- 15. ASP.Net MVC возвращающее значение от ActionLink
- 16. Asp.Net Mvc POST метод не отправляет строку
- 17. ASP.NET MVC ActionLink не выбирая правильный контроллер
- 18. ASP.NET MVC Passing models by ActionLink
- 19. Как измеряется OnSuccess для ASP.NET MVC ActionLink?
- 20. MVC ActionLink не вызывает метод контроллера
- 21. Кодировать значение dataview в ASP.NET MVC Actionlink
- 22. ActionLink в Asp.Net Mvc 2 не reidrect
- 23. ASP.NET MVC: ActionLink vs bare url
- 24. Сильно типизированный ActionLink в Asp.Net MVC 2?
- 25. ASP.NET MVC AJAX actionlink внедряет атрибут onclick
- 26. ASP.NET MVC ActionLink с функцией javascript
- 27. Asp.Net mvc pass model in ActionLink
- 28. ASP.Net MVC - Создайте ActionLink из кода позади?
- 29. ASP.NET MVC Подающей формы Использование ActionLink
- 30. ASP.NET MVC ActionLink vs. URL Rewrite
Я написал метод, похожий на Html.ActionLink, только он строит POST-форму с кнопкой «Отправить». Я посмотрю, могу ли я дать возможность заменить кнопку ссылкой, которая отправляет форму. См. Здесь: http://stackoverflow.com/questions/3449807/mvc-make-action-link-perform-a-submit/29155696#29155696 – kape123