【问题标题】:Partial View not loading data部分视图不加载数据
【发布时间】:2017-10-22 04:17:35
【问题描述】:

我正在尝试加载选项卡内部的部分视图,但它没有显示数据。

我正在使用以下代码,我可以不只是使用剃刀代码做一个循环吗?这是在我希望从另一个视图加载的部分视图中

@model IEnumerable<solitude.models.ProductImages>


@{
    ViewData["Title"] = "ProductPicturesList";
    Layout = "~/Views/Shared/_LoginAdminLte.cshtml";
}

<h2>ProductPicturesList</h2>



<table class="table">
    <thead>
        <tr>
            <th>
               Picture Title
            </th>


            <th>
                Image
            </th>


    </thead>

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


        <td>
            <a asp-action="Edit" asp-route-id="@item.ProductID">Edit</a> |
            <a asp-action="Details" asp-route-id="@item.ProductID">Details</a> |
            <a asp-action="Delete" asp-route-id="@item.ProductID">Delete</a>
        </td>

        }
        </tbody>
    </table>

它在主列表中的原因我正在使用视图模型,但我想在表单上传上方显示图片列表我最好的方法是什么,因为 obv 它没有返回任何结果我正在使用控制器我的主页。

@model solitude.models.Models.ViewModels.ProductImageVm 
@*
    For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
*@

@Html.PartialAsync("_ProductPicturesList.cshtml")

<div class="form-group">

 <form asp-controller="Products" asp-action="FileUpload" asp-route-returnurl="@ViewData["ReturnUrl"]" enctype="multipart/form-data" method="post" class="form-horizontal" role="form">



    <input asp-for="Title" />
    <input asp-for="ProductId" type="hidden" />
    <input asp-for="Image" />
    <input type="submit" />
</form>

编辑 2 我的产品图片作为一个类应该改变

public   class ProductImages
{


        [Key]
        public int ProductImageId { get; set; }

        public int ProductID { get; set; }


        public string ProductImageTitle { get; set; }
        public string ProductImageUploadUrl { get; set; }
        public string ProductImageRealPath { get; set; }

        public string ServerIpAddress { get; set; }
        public string ProductImageAltTag { get; set; }

        public int DisplayOrder { get; set; }

        public string Image { set; get; }

    }
}

【问题讨论】:

  • 好吧,您不会将带有IEnumerable&lt;solitude.models.ProductImages&gt; 的模型传递给您的部分。在此处添加它们:@Html.PartialAsync("_ProductPicturesList.cshtml", (model to send to partial view))

标签: c# asp.net-mvc razor


【解决方案1】:

您的部分视图被强类型化为ProductImages 的集合。但是在您调用此局部视图时的主视图中,您并未将模型(即 ProductImage 对象的集合)传递给此局部视图。如果您没有明确传递模型,它将尝试将模型用于父视图。在您的情况下,您的父视图强烈 ProductImageVm 视图模型类。所以它与部分视图的预期不符。

解决方案是传递一个有效的 ProductImage 集合。如果您的视图模型具有该类型的集合属性,您可以这样做

@await Html.PartialAsync("_ProductPicturesList.cshtml",Model.Images)

假设Images 类型为IEnumerable&lt;solitude.models.ProductImages&gt;

理想情况下,将实体类与视图模型混合并不是一个好主意。所以我会为 ProductImage 部分视图创建一个视图模型类并将其用作属性

public class ProductImg
{
  public string Title { set;get;}
  public string FileName  { set;get;}
  // or path as needed
}
public class EditProductImageVm
{
   public string Title { set;get;} //for the new item
   public IFormFile Image { set;get; }  //for the new item

   public IEnumerable<ProductImg> Images { set;get;}
}

现在确保主视图没有强类型化到 EditProductImageVm 并且您的局部视图强类型化到 IEnumerable&lt;ProductImg&gt;。您还需要等待对PartialAsync 方法的调用

@model YourNameSpaceGoesHere.EditProductImageVm 
<div>
   @await Html.PartialAsync("_ProductPicturesList.cshtml",Model.Images);
</div>
<form asp-controller="Products" asp-action="FileUpload" enctype="multipart/form-data"
                                 method="post" >
    <input asp-for="Title" />
    <input asp-for="Image" />
    <input type="submit" />
</form>

你的局部视图将是

@model IEnumerable<YourNameSpaceGoesHere.ProductImg>
<h3>Images</h3>
<table class="table table-condensed table-bordered">
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
             <td>
                <!-- adjust the below img src path as needed -->
                <img src="@Url.Content("~/uploads/"+item.FileName)"/>
             </td>
        </tr>
    }
</table>

【讨论】:

  • 我在上面的编辑中再次向您展示我的产品图片是什么,非常感谢这是一个实体,所以请告诉我我应该怎么做
  • 谢谢你有没有内置到 mvc 中的任何好的进度条,或者这仍然是一个 sep 的事情
  • 可能有一些客户端库可以做到这一点。只需谷歌,你会发现很多
  • 你再次帮助了我,感谢问题如何将产品 ID 传递给它以允许过滤,因为部分视图不能有控制器或可以呢?我想过滤 productid = 的列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-30
  • 2017-06-30
  • 2016-02-20
  • 2016-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多