自带数据控件@html.Action/PartialView(model)/@html.Partial
在默认访问页面中有如下代码:利用ChildActionOnly以及PartialView显示类似自带数据用户控件的作用
- <div class="clear">
- </div>
- @Html.Action("HomePageNews","News")
- <div class="clear">
- </div>
- @Html.Action("HomePagePolls","Poll")
- - - - - --
- [ChildActionOnly]
- public ActionResultHomePagePolls()
- {
- var polls =_pollService.GetPolls(_workContext.WorkingLanguage.Id, true,0, int.MaxValue);
- // IPagedList<Poll>GetPolls(int languageId, bool loadShownOnHomePageOnly,
- int pageIndex, int pageSize, boolshowHidden = false);
- //只显示在Homepage,默认showHidden=false//
- var model = polls.Select(x =>PreparePollModel(x)).ToList();
- ////内部的函数,处理Poll到PollModel的,把IpagedList<Poll>--IPagedList<PollModel>
- protected PollModelPreparePollModel(Poll poll)
- //
- returnPartialView(model);- -- -- --- ---HomepagePolls对应HomepagePools.cshtml
- }
- parialView的render如下:
- @model IList<PollModel>
- @using Nop.Web.Framework;
- @using Nop.Web.Models.Polls;
- @if (Model.Count > 0)
- {<div class="todays-poll-box">
- <div class="todays-poll-box-block">
- @foreach(var poll inModel)
- {
- @Html.Partial("_Poll", poll) //又继续使用了Control Template _Poll
- }
- </div>
- </div>
- }
_Pool.cshtml的内容,从中可以看到@Html.Partial(“_Poll”,poll)这个方式不需要Controller Action的,适合最简的Control template展示。Html.Action("HomePageNews","News")是要经过Controller的。
@model PollModel
@using Nop.Web.Framework;
@using Nop.Web.Models.Polls;
<div class="poll-item">
<span class="poll-display-text">@Model.Name</span>
@if(Model.AlreadyVoted)
{ …
@Html.Raw(addToCartWarningsSb.ToString())è直接输出后台变量
@Html.Action("HomePageNews","News")->Actioni(HomepageNews)->View(Action对应的View)->Partialview(subdata)->partialview(withoutAction)-Partialview(without Action)。。。。
从逻辑假设来看,模版View可以无穷细化下去.