Razor view engine - How can I add Partial Views
我想知道,如果可能的话,使用新的Razor视图引擎呈现局部效果的最佳方法是什么。我知道这件事到那时还没有完全完成
现在,我正在使用renderpage呈现用户控件:
1 | @RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model) |
调用renderpage的页面使用一个布局(master)页面,其中定义了三个部分:titleContent、headcontent和mainContent。当我试图从这个页面呈现我的区域设置控件时,这些部分似乎也是必需的——它们应该只在调用页面中是必需的,并且存在。无论部分视图中是否包含这些部分,我都会收到以下消息(显然,我不想包含这些部分,但它似乎是一个有趣的调试点…)。
The following sections have been
defined but have not been rendered on
the layout page
'~/Views/Shared/LocaleUserControl.cshtml':
TitleContent; HeadContent; MainContent
我的部分观点如下(改编自以下链接):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | @inherits System.Web.Mvc.WebViewPage<LocaleBaseModel> @using System.Web.UI; <p> @Html.LabelFor(model => Model.CountryName) <br /> @Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class ="text", accesskey="u"}) </p> <p> @Html.LabelFor(model => Model.StateProvince) <br /> @Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class ="text", accesskey="t" }) </p> <script type="text/javascript"> $(function () { var countries = $("#CountryName"); var statesprovinces = $("#StateProvince"); countries.change(function () { statesprovinces.find('option').remove(); var url = '@Url.Action("GetStatesProvinces","Base")'; $.getJSON(url, { countryId: countries.val() }, function (data) { $(data).each(function () { $("<option value=" + this.ID +">" + this.Name +"</option>").appendTo(statesprovinces); }); }); }); }); |
您的部分看起来很像一个编辑器模板,因此可以将其包含在内(当然,假定您的部分放在
1 | @Html.EditorFor(model => model.SomePropertyOfTypeLocaleBaseModel) |
或者,如果情况并非如此,那么简单地说:
1 | @Html.Partial("nameOfPartial", Model) |
如果您不想复制代码,像我一样,您只想显示统计信息,在您的视图模型中,您可以传递您想从中获取数据的模型,如下所示:
1 2 3 4 5 | public class GameViewModel { public virtual Ship Ship { get; set; } public virtual GamePlayer GamePlayer { get; set; } } |
然后,在控制器中,只需对各个模型运行查询,将它们传递给视图模型并返回它,例如:
1 2 3 | GameViewModel PlayerStats = new GameViewModel(); GamePlayer currentPlayer = (from c in db.GamePlayer [more queries]).FirstOrDefault(); |
[检查结果的代码]
1 2 | //pass current player into custom view model PlayerStats.GamePlayer = currentPlayer; |
如我所说,只有当您想显示相关表的统计信息时,才应该这样做,而且由于安全原因,没有其他人提到过CRUD过程的其他部分发生。