如何在@RenderPage中的布局中使用asp.net mvc局部视图

时间:2017-04-06 06:28:09

标签: asp.net-mvc asp.net-mvc-4

我有部分视图 LeftBanner.cshtml ,它应该显示来自DB(图像)的一些数据

LeftBanner.cshtml

@model IEnumerable<WebApplication1.ViewModels.Banner>

    <table class="table">


   <tr>
        <th>Test Banner!</th>
    </tr>

    @foreach (var banner in Model)
    {
        <tr>
            <td>
                @Html.LabelFor(b => banner.ImageDesc);
                <img src="@Url.Content(banner.ImagePath)" alt="Image" />
            </td>
        </tr>
    }

</table>

SharedController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.ViewModels;

namespace WebApplication1.Controllers
{
    public class SharedController : Controller
    {   
        public ActionResult LeftBanner()
        {
            List<Banner> b = new List<Banner>() {
                new Banner() {ImageDesc = "Left Banner Description", ImagePath = "~/Images/money.jpg" },
                new Banner() {ImageDesc = "Left Banner Description2", ImagePath = "~/Images/money.jpg" }
            };
             return View(b);
           // return View();
        }
    }
}

_Layout.cshtml

<!DOCTYPE html>
<html>
<head>

</head>
<body>
    <div>
        @RenderPage("~/Views/Shared/LeftBanner.cshtml") 
    </div>

</body>
</html>

错误

The model item passed into the dictionary is of type 'WebApplication1.ViewModels.EmployeeListViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[WebApplication1.ViewModels.Banner]'.

在Asp.net中,Web表单ascx UserControls可以是独立的,并且可以重复使用。

请帮助我明白,为什么我不能封装我的部分观点? 它不是真正的重用, 如果每次使用它都必须传递给局部视图模型。 它可以是独立的并且在没有传递模型的情况下转到数据库吗?

非常感谢!

1 个答案:

答案 0 :(得分:3)

在你的LeftBanner()动作方法返回,像这样,

return PartialView("LeftBanner",b);

然后在您的_Layout.cshtml页面中,将操作 LeftBanner 称为贝娄,

@Html.Action("LeftBanner", "Shared")

希望有所帮助:)