Asp.net MVC - визуализация частичного вида из области - PullRequest
5 голосов
/ 08 декабря 2010

Я создал область, которая будет обрабатывать некоторые общие вещи во всех наших продуктах разработки, такие как входы в систему, помощники HTML и т. Д. В этой области у меня есть частичное представление, на которое я пытаюсь ссылаться за пределами площадь. Я зарегистрировал область с

public class Routes : AreaRegistration
{
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Common_default",
            "Common/{controller}/{action}/{id}",
            new {
                controller = "Account",
                action = "Index",
                id = UrlParameter.Optional
            });
    }

    public override string AreaName
    {
        get { return "MvcCommons"; }
    }
}

А теперь в обычном проекте я пытаюсь сослаться на представление в области MvcCommons ...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>TestGrid</h2>

<% Html.RenderPartial("jQGridTable", ViewData.Model); %>

Но я продолжаю понимать, что вид не найден. Раньше, при создании проекта MVC Commons, я получал ошибки просмотра, но эти ошибки говорили мне, что он просматривался как в папках области, так и в папках представления по умолчанию. На этот раз я получаю только папки по умолчанию. Есть ли способ сделать это?

Спасибо всем!

Ответы [ 3 ]

5 голосов
/ 08 декабря 2010

На самом деле мне не нужно было этого делать, но я бы предположил, что вместо этого вы должны использовать Html.RenderAction(), что-то вроде Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model }).

модель должна быть заменена на имя параметров действия, но это должно работать.

edit для этого потребуется контроллер и просмотр настроек для каждого действия, хотя.

1 голос
/ 08 декабря 2010

Важно помнить, что при использовании RenderPartial вы используете его в контексте текущего действия.

Поскольку ваше действие не находится в области, оно будет искать только в папке View / для контроллера, которому принадлежит действие, а затем общую папку.

Любые представления, которыми вы хотите поделиться между областями и контроллерами и которые доступны на маршруте, должны быть корневой папкой View / Shared. На самом деле, если представление может быть вызвано как частичное подобное, вероятно, есть небольшая причина для того, чтобы он принадлежал области.

Вы можете вызывать область, когда хотите визуализировать действия, а не частичные операции, что затем изменяет контекст текущего действия на действие, в которое вы вызываете, что позволяет вам затем возвращать представления в этой области.

0 голосов
/ 08 декабря 2010

Default ViewEngine ищет представления в тех же папках области (или корня), на которые ссылается пользовательский элемент управления.Если вы хотите создать собственный способ использования или сохранения представлений, я предлагаю вам создать собственный ViewEngine.Пожалуйста, взгляните на этот пример: Реализация папок тем с использованием пользовательского ViewEngine

...