Как вызвать несколько партиалов в родительском представлении в MVC4? - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь вызвать несколько частичных представлений в родительском представлении. Я пробовал несколько способов, но не смог добиться успеха. Я думаю, что чего-то не хватает в View. Пожалуйста, ведите меня, где я иду не так.

Примечание: у меня есть частичные вопросы. Пожалуйста, предложите мне.

Следующая ошибка:

System.InvalidOperationException: 'Элемент модели передан в словарь имеет тип «Aplication.Models.ABC.ClsA», но это словарь требует модельного элемента типа 'System.Collections.Generic.IEnumerable`1 [Aplication.Models.ABC.first]' '.

Модель

public class ClsA
{        
    public List<first> firsts{ get; set; }    
    public List<second> seconds{ get; set; }
}

public class first
{     
    public string Name { get; set; }
    public string Address { get; set; }

}

public class second
{
    public string Details{ get; set; }
    public string Age{ get; set; }             
}

Контроллер

 public ActionResult ABC()
    {
        SDetails sDetails=new SDetails();        
        var model = new ClsA();
        model.firsts = sDetails.Rst();            
        model.seconds = sDetails.Rs();           
        return View(model);
    }

View

 @model Aplication.Models.ABC.ClsA 

  @Html.Partial("_PartialA");           
  @Html.Partial("_PartialB.cshtml")

_PartialA

@model  IEnumerable<Aplication.Models.ABC.first>

    <table>
        <tr>
           <th>@Html.DisplayNameFor(m => m.Name)</th>
            <th>@Html.DisplayNameFor(m => m.Address)</th>            
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>                   
                    @Html.DisplayFor(modelItem => item.Address)                    
                </td>                

            </tr>
        }
    </table>

_PartialB

@model  IEnumerable<Aplication.Models.ABC.second>

    <table>
        <tr>
           <th>@Html.DisplayNameFor(m => m.Details)</th>
            <th>@Html.DisplayNameFor(m => m.Age)</th>            
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Details)
                </td>
                <td>                   
                    @Html.DisplayFor(modelItem => item.Age)                    
                </td>                

            </tr>
        }
    </table>

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

@Html.Partial() Принимает второй параметр model. Если вы не передадите параметр в @Html.Partial(), он автоматически передаст модель текущего представления.

Параметры

HtmlHelper Тип: System.Web.Mvc.HtmlHelper Вспомогательный экземпляр HTML, который расширяет этот метод.

partialViewName Тип: System.String Имя частичного представления для отображения.

модель Тип: System.Object Модель для частичного просмотра.

Вам необходимо обновить код с

@Html.Partial("_PartialA");           
@Html.Partial("_PartialB");

К

@Html.Partial("_PartialA", Model.firsts);           
@Html.Partial("_PartialB", Model.seconds)

Вам не нужно передавать расширение файла методу @Html.Partial

0 голосов
/ 08 мая 2018

Это пример загрузки частичного просмотра. Контроллер выполняет действие для загрузки данных в частичном представлении.

public ActionResult List()
        {

            var movies = db.Movies;


            return PartialView("_list", movies.ToList());

        }

В частичном представлении _list у вас может быть что-то вроде -

 @model IEnumerable<WebApplication1.Models.Movie>


 <div class="row">
    <table class="table  table-bordered table-hover" id="moviesTable">
        <thead>
            <tr>
                <th>

                    @Html.DisplayNameFor(model => model.ID)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Title)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.ReleaseDate)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Genre)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Price)
                </th>

                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                        @Html.DisplayFor(modelItem => item.ID)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Title) 

                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.ReleaseDate)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Genre)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.Price)
                    </td>


                    <td>
                        <div class="btn-group btn-group-xs">
                            <a href="#" class="btn btn-danger delete-row" data-item="@item.ID"><i class="fa fa-trash-o"></i></a>
                            <a href="@Url.Action("Edit", new { id = item.ID } )" class="btn btn-info"> <i class="glyphicon glyphicon-pencil"></i> Edit </a>

                            <a href="@Url.Action("Details", new { id = item.ID } )" class="btn btn-success"> <i class="glyphicon glyphicon-eye-open"></i> View </a>

                            <a href="@Url.Action("DeleteInline", new { id = item.ID } )" class="btn btn-danger" onclick="return confirm('Are you sure to delete?')"> <i class="glyphicon glyphicon-trash"></i> Delete</a>


                        </div>
                    </td>
                </tr>
            }
        </tbody>
    </table>

</div>

Теперь вы можете визуализировать частичный вид на главном экране, как показано ниже -

    <div class="row">
    <div class="col-md-12" id="replacetarget">
        @{ Html.RenderAction("List", "Movies"); }

    </div>

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