Asp.net mvc 数据驱动局部视图

Asp.net mvc 数据驱动局部视图,asp.net-mvc,Asp.net Mvc,我有一个视图使用一个名为newsModels的模型,它使用IpagedList,但是在同一个视图中,我添加了一个局部视图,我想列出添加到站点的10个最新新闻项,我想将此局部视图包括在newsitems视图以及整个站点的其他视图中 最好的方法是什么。我只成功地列出了IpagedList显示的新闻项目的标题,但仍然不太正确 我假设我需要为局部视图创建一个单独的控制器,但我找不到任何关于如何执行此操作的指导 有人能提供任何建议/指导吗 //Models public class partialNews

我有一个视图使用一个名为newsModels的模型,它使用IpagedList,但是在同一个视图中,我添加了一个局部视图,我想列出添加到站点的10个最新新闻项,我想将此局部视图包括在newsitems视图以及整个站点的其他视图中

最好的方法是什么。我只成功地列出了IpagedList显示的新闻项目的标题,但仍然不太正确

我假设我需要为局部视图创建一个单独的控制器,但我找不到任何关于如何执行此操作的指导

有人能提供任何建议/指导吗

//Models
public class partialNewsMenu
   {
        public IEnumerable<NewsModels> newsTitle { get; set; }
    }

    public class NewsModels
    {
        public int id { get; set; }
        public string newsTitle { get; set; }
        [AllowHtml]
        public string newsDesc { get; set; }
        public string imagePath { get; set; }

        public string addedBy { get; set; }
        public DateTime dateAdded { get; set; }
        public bool publishNewsItem { get; set; }
    }

//Controller
 public ActionResult OpsiumNews(string sortby, int? page)
        {
            ViewBag.ImageName = "MSLOffice.jpg";
            ViewBag.ImageDesc = "Opsium News";
            ViewBag.OverlayText = "N/A";
            ViewBag.pageTitle = "Opsium News";
            ViewBag.Title = "Opsium | News";
            if (sortby == null)
            {
                ViewBag.MostRecent = "Selected";
            }
            else
            {
                ViewBag.MostRecent = "";
            }          
            ViewBag.Oldest = "";
            ViewBag.PostedBy = "";
            ViewBag.ListNewsModels = new SelectList(db.NewsModels, "Id", "newsTitle");
             var NewsModelsList = db.NewsModels.Select(s => s.newsTitle);//.Where(s => s.publishNewsItem);


            var NewsModels = db.NewsModels.Where(c => c.publishNewsItem);
            switch (sortby)
            {
                case "1":
                    NewsModels = NewsModels.OrderBy(s => s.dateAdded);
                    ViewBag.MostRecent = "Selected";
                    break;
                case "2":
                    NewsModels = NewsModels.OrderByDescending(s => s.dateAdded);
                    ViewBag.Oldest = "Selected";
                    break;
                case "3":
                    NewsModels = NewsModels.OrderBy(s => s.addedBy);
                    ViewBag.PostedBy = "Selected";
                    break;
                default:  // Name ascending 
                    NewsModels = NewsModels.OrderBy(s => s.dateAdded);
                    ViewBag.MostRecent = "Selected";
                    break;
            }
            ViewBag.currentsort = sortby;
            int pageSize = 1;
            int pageNumber = (page ?? 1);

            return View("OpsiumNews", NewsModels.ToPagedList(pageNumber, pageSize));
        }

//View
@model PagedList.IPagedList<Opsium_website.Models.NewsModels>

@using PagedList.Mvc;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />
<div class="Sub-content" id="containcontent">
    <div class="rightSideHeader">
        <div class="container">
            <div class="row">

                <div class="col-md-15 addBottomMargin">
                    @using (Html.BeginForm("OpsiumNews", "UsefulInformation", FormMethod.Get))
                    {

                        foreach (var item in Model)
                        {

                        <p>
                            Order by
                            <select name="sortby" id="sortby" onchange="submit();">
                                <option value="1" @ViewBag.MostRecent>Most Recent</option>
                                <option value="2" @ViewBag.Oldest>Oldest</option>
                                <option value="3" @ViewBag.PostedBy>Posted by</option>
                            </select>

                        </p>
                        <div class="col-md-9 addBottomMargin" id="contentText">
                            <h3>@Html.DisplayFor(model => item.newsTitle)</h3>
                            <img src="~/Images/NewsImages/@Html.DisplayFor(model => item.imagePath)"  alt="@Html.DisplayFor(model => item.newsTitle)" id="newsImage"/>
                            @MvcHtmlString.Create(item.newsDesc)
                            <p><b>Date Added:</b>@String.Format("{0:F}", item.dateAdded) - <b>Added By:</b> @Html.DisplayFor(model => item.addedBy)</p>
                        </div>
                        }
                    }
                    <div class="col-md-2 addBottomMargin" id="contentText">
                        @{Html.RenderPartial("_NewsTitlesList");} 
                    </div>
                    <div class="col-md-9 addBottomMargin">
                        Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount

                        @Html.PagedListPager(Model, page => Url.Action("OpsiumNews",
                new { page, sortby = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
                    </div>
                </div>


            </div>
        </div>
    </div>
</div>

//Partial View
@model IEnumerable<Opsium_website.Models.partialNewsMenu>

@using PagedList.Mvc;
@foreach(var items in Model){
 @Html.DisplayFor(model=>items.newsTitle)

}
//模型
公共类partialNewsMenu
{
公共IEnumerable新闻标题{get;set;}
}
公共类新闻模型
{
公共int id{get;set;}
公共字符串newsTitle{get;set;}
[allowtml]
公共字符串newsDesc{get;set;}
公共字符串imagePath{get;set;}
由{get;set;}添加的公共字符串
public DateTime dateAdded{get;set;}
public bool publishNewsItem{get;set;}
}
//控制器
public ActionResult OpsiumNews(字符串排序,整数?页)
{
ViewBag.ImageName=“MSLOffice.jpg”;
ViewBag.ImageDesc=“Opsium新闻”;
ViewBag.overlyText=“不适用”;
ViewBag.pageTitle=“Opsium新闻”;
ViewBag.Title=“Opsium | News”;
if(sortby==null)
{
ViewBag.MostRecent=“已选定”;
}
其他的
{
ViewBag.MostRecent=“”;
}          
ViewBag.Oldest=“”;
ViewBag.PostedBy=“”;
ViewBag.ListNewsModels=新建SelectList(db.NewsModels,“Id”,“newsTitle”);
var NewsModelsList=db.NewsModels.Select(s=>s.newsTitle);//.Where(s=>s.publishNewsItem);
var NewsModels=db.NewsModels.Where(c=>c.publishNewsItem);
开关(sortby)
{
案例“1”:
NewsModels=NewsModels.OrderBy(s=>s.dateAdded);
ViewBag.MostRecent=“已选定”;
打破
案例“2”:
NewsModels=NewsModels.OrderByDescending(s=>s.DateAdd);
ViewBag.Oldest=“已选定”;
打破
案例“3”:
NewsModels=NewsModels.OrderBy(s=>s.addedBy);
ViewBag.PostedBy=“已选择”;
打破
默认值://Name升序
NewsModels=NewsModels.OrderBy(s=>s.dateAdded);
ViewBag.MostRecent=“已选定”;
打破
}
ViewBag.currentsort=sortby;
int pageSize=1;
整数页码=(第1页);
返回视图(“OpsiumNews”,NewsModels.ToPagedList(pageNumber,pageSize));
}
//看法
@型号PagedList.IPagedList
@使用PagedList.Mvc;
@使用(Html.BeginForm(“OpsiumNews”,“UsefulInformation”,FormMethod.Get))
{
foreach(模型中的var项目)
{

订购人
最近的
最老的
邮寄人

@DisplayFor(model=>item.newsttitle) item.imagePath)“alt=“@Html.DisplayFor(model=>item.newsttitle)”id=“newsImage”/> @MvcHtmlString.Create(item.newsDesc) 添加日期:@String.Format(“{0:F}”,item.dateAdded)-添加人:@Html.DisplayFor(model=>item.addedBy)

} } @{Html.RenderPartial(“_newTitleList”);} @Model.PageCount的@页(Model.PageCountUrl.Action(“OpsiumNews”), 新建{page,sortby=ViewBag.CurrentSort,currentFilter=ViewBag.currentFilter}) //局部视图 @模型IEnumerable @使用PagedList.Mvc; @foreach(模型中的var项目){ @DisplayFor(model=>items.newsttitle) }
//错误
传入字典的模型项的类型为“PagedList.PagedList
1[Opsium_网站.模型.新闻模型]”,但此字典需要类型为“System.Collections.Generic.IEnumerable
1[Opsium_网站.模型.partialNewsMenu]的模型项“。

您需要共享当前代码、当前输出和预期输出。已添加代码和错误,谢谢