1

MVCとrenderpartialを使用してメニューを生成したかったのですが、機能させることができませんでした。読んだところ、RenderActionの方が適しているようでした。それでも私はそれを機能させることができていません。

私が意図したのは、カテゴリとして機能するデータベースから特定の記事を選択するコントローラーを作成することでした(これはHomeControllerに入れられます)。

public ActionResult MenuController()
    {
        var movies = from m in db.Art
                     where m.ArtikelNr.StartsWith("Webcat")
                     select m;
        return View(movies);
    }

次に、その情報をビューに送信します。

@model IEnumerable<xxxx.Models.Art>
@{
Layout = null;
}

<ul>
@foreach (var item in Model)
{
<li>@Html.DisplayFor(modelItem => item.Benämning_10)</li>
}

これは、通常のコントローラーとビューとして実行するだけで機能し、必要なもののリストを返します。しかし、_layout.cshtmlから呼び出したい場合(このメニューはすべてのページに表示されるため)、次のようになります。

<div id="sidebar">@Html.RenderAction(MenuController)</div>

次に、次のエラーが生成されます。

CS0103: The name 'MenuController' does not exist in the current context

_layout.cshtmlファイルからaction/view / whateverを呼び出す適切な方法は何ですか?

4

4 に答える 4

1
@{Html.RenderAction("MenuController");} 

また

@Html.Action("MenuController")
于 2012-02-08T13:50:42.670 に答える
1

あなたは電話するべきです

@Html.RenderAction("_MenuController")

Global.asaxに作業ルールがあることを確認してください

別の回答で示唆されているように、使用する方が良いでしょう

return PartialView();

また、 ChildActionOnlyAttributeを使用して、このアクションが標準アクションとして呼び出されないようにすることもお勧めします。

そのようなもの:

[ChildActionOnly]
public PartialViewResult _MenuController()
{
    var movies = from m in db.Art
                 where m.ArtikelNr.StartsWith("Webcat")
                 select m;
    return PartialView(movies);
}
于 2012-02-08T11:16:27.767 に答える
0

単に

@Html.RenderAction("MenuController")

文字列パラメーターを引用符で囲むのを忘れました

于 2012-02-08T11:13:17.127 に答える
0
<div id="sidebar">@Html.RenderAction("_MenuController")</div>

アクション名を引用符で囲みます :) 部分的なビューを返すことも良い方法かもしれません:

return PartialView(movies);
于 2012-02-08T11:14:53.330 に答える