Проблемы с RenderAction в MVC 3 - PullRequest
       37

Проблемы с RenderAction в MVC 3

1 голос
/ 08 февраля 2012

Я хотел использовать 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?

Ответы [ 4 ]

1 голос
/ 08 февраля 2012
@{Html.RenderAction("MenuController");} 

или

@Html.Action("MenuController")
1 голос
/ 08 февраля 2012

Вам следует позвонить

@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);
}
0 голосов
/ 08 февраля 2012
<div id="sidebar">@Html.RenderAction("_MenuController")</div>

Кавычки вокруг имени вашего действия :) Также может быть полезно вернуть частичное представление:

return PartialView(movies);
0 голосов
/ 08 февраля 2012

Просто

@ Html.RenderAction ( "MenuController")

Вы забыли кавычки вокруг вашего строкового параметра

...