12

Asp.Net MVCで、アクションメソッドを属性で装飾するNonActionと、サイトにアクセスするユーザーがそのメソッドを呼び出すことができなくなります。私が作ったときにも同じことが起こりますprivate

それでは、2つの違いはNonAction何ですか?属性が作成された特別な目的はありますか?

たとえば、違いは何ですか

[NonAction]
public ActionResult SomeAction(){}

private ActionResult SomeAction(){}

もちろん、asp.net MVCのコンテキストでは、一方がpublicであり、もう一方がprivate

4

2 に答える 2

9

それが唯一の違いです。この属性は、アクションとなるシグニチャを持つメソッドが必要であるが、アクションにはなりたくない場合に使用されます。

その使用例は、アクションメソッドがActionResultそれらのを生成するために呼び出すメソッドです。

[NonAction]
public JsonResult JsonInfo(string id, string value) {
  return Json(new { id = id, value = value });
}

public JsonResult GetBusInfo() {
  return JsonInfo("4", "Bus");
}

public JsonResult GetCarInfo() {
  return JsonInfo("8", "Car");
}

プライベートではなくパブリックにする理由は、他のコントローラーのアクションでも使用できるようにするためです。

于 2013-02-09T10:23:40.477 に答える
0

どちらもアクションメソッドで同じように機能します。別々に使用することも、一緒に使用することもできます。

[NonAction]           
        private ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            FEED_TBL fEED_TBL = db.FEED_TBL.Find(id);
            if (fEED_TBL == null)
            {
                return HttpNotFound();
            }
            return View(fEED_TBL);
        }

上記のコードのように宣言すると、詳細アクションメソッドに移動しようとすると、そこには移動せず、エラーが表示されます。

{{ HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.}}

これは、ビュー上の詳細リンクが、詳細アクションメソッドとへのコントローラーへの参照を検出したことを示しています。

于 2016-05-15T13:28:46.533 に答える