リンクと検索ボタンがあります。検索ボタンをクリックすると、事前定義されたアクションにページが投稿されます。リンクをクリックすると、ページが別のアクションにポストされ、非表示のすべての値が別のアクションにポストされるはずです。それはできますか?
2 に答える
通常、リンクはアンカー タグを生成し、通常はHTTP GETリクエストを返します。投稿リクエストではありません。action
メソッドのパラメーターとして受け入れられるパラメーターをリンクに指定できます。
@Html.ActionLink("Search","Search","Items",new { @id="nokia" },null);
これにより、値が nokia の id というクエリ文字列キーを持つリンクが生成されます。
../Items/Search/nokia
また
../Items/Search?id=nokia
そして、id
パラメータを持つアクションメソッドはこのGET
リクエストを処理できます
public ActionResult Search(string id)
{
//Do whatever you want to do with the value in id. return a view with results
}
本当にリンクから実行したいHTTPPost
場合は、JavaScript でリンクのクリック イベントを取得して、httppost 呼び出しを行うことができます。以下のスクリプトは、jQuery ライブラリでそれを行います。
$(function(){
$("a").click(function(e){
e.preventDefault();
$.post($(this).attr("href"),function(result){
//do whatever with the results
});
});
});
ただし、このリクエストを処理するために、コントローラーに ActionMethod の HttpPost バージョンがあることを確認してください。
[HttpPost]
public ActionResult Search(string id)
{
//This is a POST request.Do whatever you want to do with the value in id. return a view with results
}
@Html.ActionLink
HTTP POST には使用できません(編集: javascript 関数を使用して onClick HtmlAttribute を指定してフォームを送信しない限り) 。代わりに送信ボタンを使用し、jQuery を使用してハイパーリンクとしてスタイルを設定できます。この場合、どのような値でもモデルを投稿できるはずです。
@Ajax.ActionLink
または、使用して指定することもできますAjaxOptions { HttpMethod = "POST" }