HTML.Partial - MVC 3 Razor - PullRequest
       9

HTML.Partial - MVC 3 Razor

0 голосов
/ 18 марта 2011

У меня проблема с возвратом частичного вида из контроллера с моделью, отличной от моего основного вида. Например:

    public ActionResult Index()
    {
        //myModel - get Some Types
        return View(mymodel);
    }

    public PartialViewResult Categories()
    {
        //my another Model - get different Types

        return PartialView(myanothermodel);
    }

А затем в индексном представлении:

@Html.RenderPartial("Categories")

Я получаю исключение, говорящее, что это неправильный тип. Ожидается первый тип (mymodel) вместо второго типа.

Можно ли вернуть разные типы для просмотра и его частичного просмотра? Спасибо за ответ.

Ответы [ 3 ]

5 голосов
/ 18 марта 2011

Похоже, вы пытаетесь визуализировать действие , а не представление.

Звоните @Html.Action("Categories").

1 голос
/ 11 января 2012

Когда вы используете Частичное представление , используйте только

@Html.Partial("Categories", Model)  

или конкретную модель с собственными данными

@Html.Partial("Categories", Model.Category) 
0 голосов
/ 09 июня 2011

Я просто немного понял, как работает частичное представление.На самом деле, в вашем и моем случае нет необходимости определять действие Categories(), если вы думаете, что логика для получения myanothermodel может быть выполнена в действии Index().

Итак, мне назначено mymodel.myanothermodel вIndex() action и затем в строго типизированном Index.cshtml Я использовал это: (предположим, myanothermodel is Categories)

@{Html.RenderPartial("Categories", Model.Categories);}

альтернативно:

@Html.Partial("Categories", Model.Categories)

Обратите внимание, что всегдаиспользуйте .RenderPartial() вместо .Partial() для лучшей производительности в представлении .cshtml.Я использовал Model.Categories вместо mymodel.Categories, потому что у строго набранного Index.cshtml уже есть @model mymodel в начале файла.

В моей практике у меня есть такие модели:

  • Model.Departments - IList<DepartmentModel>
  • Model.SelectedDepartment - DepartmentModel
  • Model.Employees - IList<EmployeeModel>

, который используется в:

@{Html.RenderPartial("DepartmentMenu", Model.Departments);}

<div id="employeeViewContainner">
    @foreach (var emp in Model.Employees)
    {
        Html.RenderPartial("CardView" + Model.SelectedDepartments.Name, emp);
    }
</div>

Будет отображаться список сотрудников с другим скином для разных отделов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...