2013-02-09 70 views
9

のAsp.Net MVCでは、属性がNonActionのアクションメソッドをデコレートすると、そのサイトを訪れるユーザーから呼び出されることは許されません。 私はそれを作ると同じことが起こるprivate

それでは、2つの違いは何ですか?NonActionという属性が作られているという特別な目的がありますか?例えばプライベートメソッドとアクションの違いは、Asp.Net MVC

もちろんのasp.net MVCのコンテキストで

[NonAction] 
public ActionResult SomeAction(){} 

そして

private ActionResult SomeAction(){} 

との差が、私は1つがpublic知っていると、もう一つはprivate

答えて

8

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

の例では、アクションメソッドが彼らのために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"); 
} 

理由は、そう、他のコントローラのアクションができたということでしょうそれも使用してください。

+0

他のコントローラは、 'NonAction'とマークされた' public'メソッドをどのように使用できますか? – mipe34

+3

@ mipe34:コントローラのインスタンスを作成し、メソッドを呼び出します。 – Guffa

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); 
     } 

我々は、それはそれはエラーが表示されますit.Ratherして行くことはありません詳細アクションメソッドへ行くしようとするときに上記のコードのようにそれを宣言した場合。

{{ 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.}} 

これは、私たちの詳細リンクが表示されていることを示していますアクションメソッドとコントローラの詳細を参照してください。

+1

なぜ大文字ですか? – manetsus

+0

404の応答が一般的です。どちらか一方または両方を一緒に使うと、同じ応答が得られます。あなたは何を指摘しようとしていますか? –

関連する問題