0

_MainPage私は、他のビューが私のウェブサイトの基本的なレイアウトのためにそれを使用するフォルダーで呼び出されるビューを持つウェブサイトを開発しているView\Sharedので、このビューにはデータベースからデータを取り込むセクションがあります。実際、このセクションはサイトの最新ニュースであり、私はすべきですこのセクションに最新のニュースを表示します。簡単な方法で、たとえばセクションを次のように作成する必要がありますlatestNews

<ul class="news-list">
    @RenderSection("latestNews",required:false)
</ul>

そして、各ビューで、データが関連するコントローラーから来たかみそりでこのセクションを埋める必要があります:

@foreach (var item in Model.News)
{
    <div>
        <p>@Html.Raw(item.Body)<br /><a href="#">ادامه مطلب</a></p>
    </div>
}

実際、ページのフッターのすべてのビューに最新ニュースがあります。

_MainPage今私の質問は次のとおりです。各ビューでこれらのルーチンを実行していないビュー()のカスタムコントローラーをどのように定義できますか。それを達成する一般的な方法はありますか?

4

2 に答える 2

1

コントローラー クラスのすべてのパブリック メソッドはアクション メソッドです。コントローラー クラスのすべてのアクション メソッドは、Web ブラウザーまたはアプリケーションのビュー ページから URL を介して呼び出すことができます。

あなたのシナリオは、アプリケーションのいくつかのページに表示する必要がある動的な情報 (データ) です。通常、アクション メソッドによってビューに渡されるモデルにそのデータを追加することになります。DRY (Don't Repeat Yourself) 原則を破る複数のモデルで同じデータを複製します。

このシナリオを処理するために、ASP.NET MVC には子アクション メソッドが用意されています。どのアクション メソッドもアクション メソッドの子にすることができますが、子アクションはビュー内から呼び出されるアクション メソッドです。ユーザー リクエスト (URL) を介して子アクション メソッドを呼び出すことはできません。

[ChildActionOnly]子アクションを作成するための属性でアクション メソッドに注釈を付けることができます。通常、部分ビューで子アクション メソッドを使用しますが、毎回ではありません。

[ChildActionOnly]アクション メソッドを子アクションとしてのみ呼び出す必要があることを示すために使用される属性を表します。

[ChildActionOnly]
public ActionResult GetNews(string category)
{
    var newsProvider = new NewsProvider();
    var news = newsProvider.GetNews(category);
    return View(news);
}

Html.RenderAction()上記の子アクション メソッドは、またはメソッドを使用して、アプリケーションの任意のビュー内で呼び出すことができますHtml.Action()

@Html.Action("GetNews", "Home", new { category = "Sports"})

(また)

@{ Html.RenderAction("GetNews", "Home", new { category = "finance"}); }
于 2013-09-01T18:25:29.170 に答える
1

セクションの代わりにHtml.RenderAction、コントローラーとアクションを指定するために使用できます。アクションは部分的なビューを返す必要があり、それが呼び出し元のサイトに統合されます。

于 2013-09-01T18:12:33.487 に答える