@Html.ActionLink()
のPOST
代わりにを強制することは可能GET
ですか?もしそうなら、どのように?
5 に答える
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
}
そのようなものが必要な場合は、サーバー側で「永続的な」何かを実行するアクション用だと思います。たとえば、データベース内のオブジェクトを削除します。
リンクと投稿を使用して削除を行う完全な例を次に示し ます。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);
}
私がすることはあなたのhtmlをフォームの周りにラップすることです
@using(Html.BeginForm("YourAction","YourController", FormMethod.Post)){
<button>Hello</button>
}
リンクを使用する代わりに、ボタンを使用することをお勧めします。
本当にリンクを使用したい場合は、JavaScriptが必要になる場合があります
このようなもの:
$("#idOfYourLink").click(function(){
var form = $(this).parents('form:first');
form.submit();
});
<a>
要素にWebサーバーへのPOSTを実行させることはできません。
Javascriptを使用して、クリックイベントをキャプチャし、ナビゲーションを停止し、サーバーに対してAJAX POSTを実行できますが、ユーザーがJavascriptを無効にしている場合は、何も起こりません。
<a>
要素を使用する必要がありますか、それとも要素に似たものを使用する必要があります<a>
か?
また、言及する価値があるのは、を見てみることですAjaxLink
。これにより、要素を簡単に使用して<a>
AJAXPOSTを実行できます。
あなたが考えるなら...POSTを行うHTMLのリンクのタグはありません。そのため、リンクにPOSTを強制することはできません(そしてそれは意味がありません)。「POST」を使用するには、何かを「POST」する必要があります。そして、それはフォームである必要があります。または、AJAXのjavascript関数を使用してPOSTを実行できます。とにかく、何も投稿せずにPOSTする必要がある場合は、リソースモデルを確認する必要があります。何かが悪臭を放ちます。