いつ属性を使用しますChildActionOnly
か? とは何ChildAction
ですか?また、この属性を使用してアクションを制限したい状況は何ですか?
6 に答える
このChildActionOnly
属性は、アクション メソッドがビュー内から子メソッドとしてのみ呼び出されることを保証します。アクション メソッドは、子アクションとして使用するためにこの属性を持つ必要はありませんが、ユーザー リクエストの結果としてアクション メソッドが呼び出されるのを防ぐために、この属性を使用する傾向があります。アクション メソッドを定義したら、アクションが呼び出されたときにレンダリングされるものを作成する必要があります。必須ではありませんが、通常、子アクションは部分ビューに関連付けられます。
[ChildActionOnly] ビューでコードを介して制限付きアクセスを許可する
特定のページ URL の状態情報の実装。例: 支払いページの URL (1 回のみの支払い) かみそりの構文により、特定のアクションを条件付きで呼び出すことができます
[ ChildActionOnly ]属性に注釈を付けると、アクション メソッドはビュー内から子メソッドとしてのみ呼び出すことができます。[ChildActionOnly]の例を次に示します。.
アクション メソッドには、Index() と MyDateTime() の 2 つと、対応するビューの Index.cshtml と MyDateTime.cshtml があります。これはHomeController.cs です
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "This is from Index()";
var model = DateTime.Now;
return View(model);
}
[ChildActionOnly]
public PartialViewResult MyDateTime()
{
ViewBag.Message = "This is from MyDateTime()";
var model = DateTime.Now;
return PartialView(model);
}
}
Index.cshtmlのビューを次に示します。
@model DateTime
@{
ViewBag.Title = "Index";
}
<h2>
Index</h2>
<div>
This is the index view for Home : @Model.ToLongTimeString()
</div>
<div>
@Html.Action("MyDateTime") // Calling the partial view: MyDateTime().
</div>
<div>
@ViewBag.Message
</div>
これがMyDateTime.cshtml部分ビューです。
@model DateTime
<p>
This is the child action result: @Model.ToLongTimeString()
<br />
@ViewBag.Message
</p>
アプリケーションを実行してこのリクエストを行う場合 http://localhost:57803/home/mydatetime 結果は次のようにServer Errorになります。
つまり、部分ビューを直接呼び出すことはできません。ただし、Index.cshtml のように Index() ビューを介して呼び出すことができます。
@Html.Action("MyDateTime") // 部分ビューの呼び出し: MyDateTime().
[ChildActionOnly]を削除して同じリクエスト http://localhost:57803/home/mydatetime を実行すると、mydatetime 部分ビューの結果を取得できます。
This is the child action result. 12:53:31 PM
This is from MyDateTime()
You would use it if you are using RenderAction
in any of your views, usually to render a partial view.
The reason for marking it with [ChildActionOnly]
is that you need the controller method to be public so you can call it with RenderAction
but you don't want someone to be able to navigate to a URL (e.g. /Controller/SomeChildAction) and see the results of that action directly.
参考までに、[ChildActionOnly] は ASP.NET MVC Core では使用できません。ここでいくつかの情報を参照してください