ファイルのリストを表示していて、ユーザーがリストから削除できるようにしています。削除ボタンは、コントローラーへのajax呼び出しを実行して「削除」アクションを実行します。ただし、削除アクションは呼び出されません.AjaxOptionsで定義された確認アラートが表示されます。それが価値あるものであれば、WebFormsエンジンを使用して作業し、それをRazorに移動しただけです。また、私がAreaを使ったのは初めてです。削除アクションを直接呼び出すと動作します。これはルーティングの問題ですか?Ajax.ActionLinkがコントローラ・アクションを呼び出さない
ここ
public EmptyResult Delete(string fileName)
{
if (fileName.IsNullOrEmpty()) return null;
var model = new Models.BenefitBookletModel();
model.DeleteBooklet(fileName);
return null;
}
の背後にあるコードはここ。ここ
@Ajax.ActionLink("test", "Delete", new { fileName = item.FileName }, new AjaxOptions
{
Confirm = "Are you sure you want to delete " + item.FileName + "?",
OnComplete = "function(){deleteComplete('" + item.jsReferenceableFileName + "')}",
HttpMethod = "DELETE",
OnFailure = "function(){alert('Could not delete file');}"
}, new { @class = "DeleteButton" }
)
アップマークが私のRegisterRoutesエリア登録
context.MapRoute("Marketing_default","Marketing/{controller}/{action}/{id}",new { action = "Index", id = UrlParameter.Optional }
から
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("SubscriberAll","subscriber/{id}",new { controller = "Subscriber", action = "ShowAll" },new { id = @"\d+" });
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
ルートでいますここで
削除するアクションリンクのHTTPMETHODを定義しているが、あなたの方法は、おそらく唯一のGET受け付け
<a href="/Marketing/BenefitBooklet/Delete?fileName=MyFileName.pdf" data-ajax-method="GET" data-ajax-failure="function(){alert('Could not delete file');}" data-ajax-confirm="Are you sure you want to delete MyFileName.pdf?" data-ajax-complete="function(){deleteComplete('MyFileName.pdf')}" data-ajax="true" class="DeleteButton"> </a>
あなたがルートを登録Global.asaxのからの情報を追加してください。 – Kath
Deleteメソッドはビューをレンダリングしたものと同じコントローラ内にありますか?そうでなければ、ActionLink(AjaxHelper、String、String、String、Object、AjaxOptions)オーバーロードを使用してコントローラを定義する必要があります。 –
はい、両方とも同じコントローラにあります。 –