6

@Html.ActionLink()POST代わりにを強制することは可能GETですか?もしそうなら、どのように?

4

5 に答える 5

9

ActionLinkヘルパーメソッドはanchorタグをレンダリングし、クリックすると常にGETリクエストになります。POSTリクエストしたい場合。少し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      
}
于 2012-07-15T02:16:54.210 に答える
8

そのようなものが必要な場合は、サーバー側で「永続的な」何かを実行するアクション用だと思います。たとえば、データベース内のオブジェクトを削除します。

リンクと投稿を使用して削除を行う完全な例を次に示し ます。http ://www.squarewidget.com/Delete-Like-a-Rock-Star-with-MVC3-Ajax-and-jQuery

前のリンクから(とにかく読むことをお勧めします):

ビュー内の削除リンク:

@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);
    }
于 2012-07-15T01:59:22.373 に答える
4

私がすることはあなたのhtmlをフォームの周りにラップすることです

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

<button>Hello</button>

}

リンクを使用する代わりに、ボタンを使用することをお勧めします。

本当にリンクを使用したい場合は、JavaScriptが必要になる場合があります

このようなもの:

$("#idOfYourLink").click(function(){
var form = $(this).parents('form:first');
form.submit();
});
于 2012-07-15T00:33:03.163 に答える
1

<a>要素にWebサーバーへのPOSTを実行させることはできません。

Javascriptを使用して、クリックイベントをキャプチャし、ナビゲーションを停止し、サーバーに対してAJAX POSTを実行できますが、ユーザーがJavascriptを無効にしている場合は、何も起こりません。

<a>要素を使用する必要がありますか、それとも要素にたものを使用する必要があります<a>か?

また、言及する価値があるのは、を見てみることですAjaxLink。これにより、要素を簡単に使用して<a>AJAXPOSTを実行できます。

于 2012-07-15T01:22:55.640 に答える
0

あなたが考えるなら...POSTを行うHTMLのリンクのタグはありません。そのため、リンクにPOSTを強制することはできません(そしてそれは意味がありません)。「POST」を使用するには、何かを「POST」する必要があります。そして、それはフォームである必要があります。または、AJAXのjavascript関数を使用してPOSTを実行できます。とにかく、何も投稿せずにPOSTする必要がある場合は、リソースモデルを確認する必要があります。何かが悪臭を放ちます。

于 2012-07-15T01:03:52.853 に答える