ASP.NET Core 2.1 Partial Helper Tag создает проблемы, когда модель необходимо загрузить из базы данных - PullRequest
0 голосов
/ 18 января 2019

Я продолжаю получать проблемы при попытке загрузить частичное представление, которое содержит список элементов, загруженных из базы данных. Я сделал пример, чтобы проиллюстрировать мою проблему:

У меня есть класс «Продукт», для которого я создал представление «Индекс», в котором отображается список продуктов. Я хотел бы загрузить это представление в другое представление («Домашняя страница»). Я использовал тег <Partial name="~/Views/Product/Index.cshtml"/>. Я думал, что должен был добавить for="Product" или даже model="Product", но я продолжаю получать сообщение об ошибке (красное фигурное подчеркивание) с ошибкой: An expression tree may not contain a dynamic operation.

Есть ли разрешение или я должен использовать вместо него старый

ДОМАШНЯЯ СТРАНИЦА

@using PartialViewAlts.Models;


<div class="row">
    <div class="col-md-12 text-center">
        <h2>Partial View Tester</h2>        
    </div>
</div>
<div class="row">   
    <div>
        <h2>Tag Helper Partial method</h2>       
        <partial name="~/Views/Product/Index.cshtml" for="Product"/>  //produces an error     
    </div> 
</div>

СТРАНИЦА ИНДЕКСА ПРОДУКТОВ

@model IEnumerable<PartialViewAlts.Models.ToDoItem>

<h2>Partial view list of products</h2>
<table class="table">
    <thead>
        <tr>
            <th>@Html.DisplayNameFor(model => model.Name)</th>
            <th>@Html.DisplayNameFor(model => model.Priority)</th>
            <th>@Html.DisplayNameFor(model => model.IsDone)</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.Name)</td>
                <td>@Html.DisplayFor(modelItem => item.Priority)</td>
                <td>@Html.DisplayFor(modelItem => item.IsDone)</td>                   
            </tr>
        }
    </tbody>
</table>

РЕДАКТИРОВАТЬ: код Home Controller был добавлен

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using PartialViewAlts.Data;
using PartialViewAlts.Models;

namespace PartialViewAlts.Controllers
{
    public class HomeController : Controller
    {        
        public IActionResult Index()
        {
            return View();
        }  

     }
}

1 Ответ

0 голосов
/ 18 января 2019

Я полагаю, что проблема заключается в том факте, что вы ожидаете IEnumerable для модели в частичном, пока вы указываете для = = Product ". Это немного неясно относительно того, что это в данный момент

Пожалуйста, смотрите: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/built-in/partial-tag-helper?view=aspnetcore-2.2

в частности говорится, что

Атрибут for назначает выражение ModelExpression для оценки относительно текущей модели. ModelExpression выводит @Model. синтаксис. Например, for = "Product" может использоваться вместо for = "@ Model.Product". Это поведение вывода по умолчанию переопределяется с помощью символа @ для определения встроенного выражения. Атрибут for нельзя использовать с атрибутом модели.

Редактирование, чтобы привести пример:

public class IndexModel{
public IEnumerable<Product> Products{get;set;} 

}

Выше приведен пример модели, которую вы можете использовать. В этом случае у вас есть IndexModel в качестве модели для вашей страницы индекса, а при вызове частичного представления вы будете ссылаться на = "@ Model.Products"

Таким образом, вы передаете IEnumerable внутри вашей части.

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

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