174

いつ属性を使用しますChildActionOnlyか? とは何ChildActionですか?また、この属性を使用してアクションを制限したい状況は何ですか?

4

6 に答える 6

166

このChildActionOnly属性は、アクション メソッドがビュー内から子メソッドとしてのみ呼び出されることを保証します。アクション メソッドは、子アクションとして使用するためにこの属性を持つ必要はありませんが、ユーザー リクエストの結果としてアクション メソッドが呼び出されるのを防ぐために、この属性を使用する傾向があります。アクション メソッドを定義したら、アクションが呼び出されたときにレンダリングされるものを作成する必要があります。必須ではありませんが、通常、子アクションは部分ビューに関連付けられます。

  1. [ChildActionOnly] ビューでコードを介して制限付きアクセスを許可する

  2. 特定のページ URL の状態情報の実装。例: 支払いページの URL (1 回のみの支払い) かみそりの構文により、特定のアクションを条件付きで呼び出すことができます

于 2012-04-20T21:34:00.720 に答える
131

[ 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()
于 2014-09-02T20:04:49.057 に答える
75

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.

于 2012-04-20T21:26:48.647 に答える
11

参考までに、[ChildActionOnly] は ASP.NET MVC Core では使用できません。ここでいくつかの情報を参照してください

于 2017-02-14T21:53:05.667 に答える