0

メイン ビューにいくつかのアイテムをリストする部分ビューがあります。Razor はこの部分ビューを正しく生成し、(@Html.ActionLink コマンドを使用して) コントローラーのアクションを指し、正しい ID を送信するアクション リンクを挿入しました。それはすべてうまくいきますが、私はそれがそのままであり、何も返す必要がないことを願っています!

現在、メイン ビューを変更する何か (コンテンツ、ビュー、リダイレクトなど) を返送する必要がありますが、それは望ましくありません。

私がやりたいことは、サーバーでアクションを実行し、そのままにしておくことだけです。他に何ができますか?

ありがとう

@model IEnumerable<PopupForm.Models.BOExplorerItem>

<h3>Explorer (partial)<br />
    There are @Model.Count() explorer items.
</h3>

<ul class="ulexplorer">

    @foreach (var item in Model)
    {
        <li>
            <div class="boitem">
                <h5>@item.FullName [<i> @item.Code </i>]</h5>
                <span>Level: @item.Level</span>
                @Html.ActionLink("Select", "SelectEntity", "Explorer", new { code = @item.Code }, null)
            </div>
        </li>
    }

</ul>
4

1 に答える 1

0

できることは、リンクのクリック イベントをリッスンし、通常のリダイレクト動作の代わりに ajax 呼び出しを行うことです。実行したいコードを ajax 呼び出しで開始させます。

このようにリンクを変更して css クラスをリンクに適用し、それを jQuery 要素セレクターとして使用できるようにします。

@Html.ActionLink("Select", "SelectEntity", "Explorer",
                            new { code = @item.Code }, new { @class="ajaxLink"})

クリックイベントをバイパスするJavaScript

$(function(){
  $("a.ajaxLink").click(function(e){
    var _item=$(this);
    e.preventDefault();  //prevent default behaviour
    $.get(_item.attr("href");
  });
});

Action メソッドを通常の ajax 化されていないリクエストで通常どおり実行する (View /Other コンテンツを返す) 場合は、if 条件チェックを追加して、リクエストが ajax かどうかを確認できます。

public ActionResult SelectEntity()
{
  if (Request.IsAjaxRequest())
  {
    //Execute your method and return a Json result to keep the compiler happy.
    return Json(new {Status="Success"},JsonRequestBehavior.AllowGet);
  }
  else
  {
     //Return the normal view,
     return View();
  } 
}
于 2012-12-13T15:09:09.687 に答える