Вопрос по asp.net-mvc-3, asp.net-mvc – ASP.NET MVC 3: Как заставить ActionLink выполнять HttpPost вместо HttpGet?

6

Можно ли заставить@Html.ActionLink() сделатьPOST вместоGET? Если так, то как?

Нет, вы не можете это сделать только для GET VJAI

Ваш Ответ

5   ответов
1

Невозможно иметь<a> Элемент выполнения POST для веб-сервера.

Вы можете использовать Javascript для захвата события нажатия, остановки навигации и выполнения AJAX POST на сервере, но если у пользователя отключен Javascript, ничего не произойдет.

Вы должны использовать<a> элемент, или просто то, чтоresembles <a> элемент?

Также стоит упомянуть, чтобы взглянуть наAjaxLink, Это позволяет легко использовать<a> элемент для выполнения AJAX POST.

9

ActionLink вспомогательный метод будет оказыватьanchor тег, нажав на который всегдаGET запрос. Если вы хотите сделать этоPOST запрос. Вы должны переопределить behviour по умолчанию, используя небольшой javacsript

@ActionLink("Delete","Delete","Item",new {@id=4},new { @class="postLink"})

Теперь некоторыеjQuery код

<script type="text/javascript">
  $(function(){
    $("a.postLink").click(function(e){
      e.preventDefault();
      $.post($(this).attr("href"),function(data){
          // got the result in data variable. do whatever you want now
          //may be reload the page
      });
    });    
  });    
</script>

Убедитесь, что у вас естьAction методHttpPost тип для обработки этого запроса

[HttpPost]
public ActionResult Delete(int id)
{
  // do something awesome here and return something      
}
4

Что бы я сделал, это обернул ваш HTML вокруг формы

@using(Html.BeginForm("YourAction","YourController", FormMethod.Post)){

<button>Hello</button>

}

Вместо ссылки вы можете использовать кнопку.

Если вы действительно хотите использовать ссылку, вам может понадобиться JavaScript

Что-то вроде этого:

$("#idOfYourLink").click(function(){
var form = $(this).parents('form:first');
form.submit();
});
0

Если вы думаете ... в HTML нет тега для ссылки, которая делает POST. И именно поэтому вы не можете принудительно заставить ссылку делать POST (а это не имеет никакого смысла). Чтобы использовать «POST», вы должны «POST» что-то. И это что-то должно быть формой, или вы можете сделать POST, используя функцию Javascript для AJAX. В любом случае, если вам нужно POST без публикации чего-либо, вы должны просмотреть свою модель ресурса, что-то воняет.

8

Я полагаю, что если вам нужно что-то подобное для Действия, которое будет делать что-то «постоянное» на стороне сервера. Например, удаление объекта в базе данных.

Вот полный пример удаления по ссылке и публикации: http://www.squarewidget.com/Delete-Like-a-Rock-Star-with-MVC3-Ajax-and-jQuery

From the previous link (recomended reading anyway):

Ссылка для удаления по вашему мнению:

@Ajax.ActionLink("Delete", "Delete", "Widget",
                new {id = item.Id},
                new AjaxOptions {
                    HttpMethod = "POST",
                    Confirm = "Are you sure you want to delete this widget?",
                    OnSuccess = "deleteConfirmation"
                }) 

Немного JS:

function deleteConfirmation(response, status, data) {

        // remove the row from the table
        var rowId = "#widget-id-" + response.id;
        $('.widgets').find(rowId).remove();

        // display a status message with highlight
        $('#actionMessage').text(response.message);
        $('#actionMessage').effect("highlight", {}, 3000);
    }
отличная ссылка. Если бы я мог пометить 2 ответа как правильные, то, надеюсь, будет достаточно upvote. Спасибо wgpubs
Ссылка обновлена ...
Ссылка больше не работает

Похожие вопросы