Частичный вид бритвы не рендеринг - PullRequest
3 голосов
/ 04 мая 2011

Если я использую следующий метод Контроллера:

public ActionResult Menu()
{
    // do stuff...

    return PartialView("viewName", navLinks);
}

вызов частичного представления в _Layout.cshtml следующим образом:

<div id="categories">
    @{ Html.Action("Menu", "Nav"); }
</div>

Со следующим частичным представлением ASCX:

<%@ Control Language="C#"
    Inherits="ViewUserController<IEnumerable<MyDataType>>" %>

<% foreach(var link in Model) { %>
    <%: Html.Route.Link(link.Text, link.RouteValues) %>
<% } %>

все отлично работает. Yay.


НО, если я использую любой из следующих частичных видов RAZOR:

@model IEnumerable<MyDataType>

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}

или ...

@model IEnumerable<MyDataType>

@{
    Layout = null;
}

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}

Я ничего не понимаю. нет никаких исключений, я просто ничего не получаю. Я знаю, что проблема не в методе контроллера (он прекрасно работает с частичным представлением ASCX).

Что здесь происходит?

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

Попробуйте изменить это:

@foreach(var link in Model){
    Html.RouteLink(link.Text, link.RouteValues);
}

к этому:

@foreach(var link in Model){
    @Html.RouteLink(link.Text, link.RouteValues);
}

Похоже, без @ вызывается метод, но возвращаемое значение просто отбрасывается. Если поставить символ @, это будет записано в ответе.

5 голосов
/ 04 мая 2011

Метод RenderAction записывает действие непосредственно в представление и возвращает void.
Метод Action возвращает содержимое действия, но ничего не записывает в представление.

Запись @something выведет на страницу значение something.
Вы не можете написать @Html.RenderAction, так как RenderAction ничего не возвращает.

Запись Html.Action(...) (без @) вызывает метод нормально, но ничего не делает с его возвращаемым значением.

1 голос
/ 04 мая 2011

ОК, изменение способа вызова из _Layout.cshtml ...

<div id="categories">
    @Html.Action("Menu", "Nav");
</div>

Важно отметить, что @ Html.RenderAction НЕ работает для меня. Мне бы очень хотелось получить здесь какое-то объяснение, потому что сейчас изучение Razor расстраивает меня, так как документации мало, а проблемы, подобные этим, которые должны занимать минуты, поглощают слишком много моего времени.

...