我想知道在新的 Razor 视图引擎中,如果可能的话,渲染局部视图的最佳方法是什么。 我知道这是一些时间内没有完全完成的事情。
现在我正在使用 RenderPage 来渲染用户控件:
RenderPage调用页面时使用了一个布局(master)页面,其中定义了三个部分:TitleContent、HeadContent和Maincontent。当我尝试从该页面呈现我的本地控件时,似乎这些部分也是必需的 - 它们应该只在调用页面中需要并且已经存在。无论我是否在我的部分视图中包含这些部分,我都会收到以下消息(显然我不想包含这些部分,但它似乎是一个有趣的调试点...)。
现在我正在使用 RenderPage 来渲染用户控件:
@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model)
RenderPage调用页面时使用了一个布局(master)页面,其中定义了三个部分:TitleContent、HeadContent和Maincontent。当我尝试从该页面呈现我的本地控件时,似乎这些部分也是必需的 - 它们应该只在调用页面中需要并且已经存在。无论我是否在我的部分视图中包含这些部分,我都会收到以下消息(显然我不想包含这些部分,但它似乎是一个有趣的调试点...)。
已经定义了以下部分,但没有在布局页 '~/Views/Shared/LocaleUserControl.cshtml' 上呈现:TitleContent;HeadContent;MainContent
我的部分视图如下所示(改编自以下link):
@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);
});
});
});
});
</script>
Html.RenderPartial
,它返回void。而Html.Partial
则返回一个MvcHtmlString
。因此,如果你的部分视图包含大量标记,则会创建一个可能非常庞大的字符串对象,然后立即进行垃圾回收。是否有一种方法可以直接使用Razor将内容呈现到输出中? - Drew Noakes@{...}
块中应该可以解决问题。不知道是否有更好的解决方案。 - CodesInChaos