Вот как работает метод RenderPartial (я знаю, что должен был быть задокументирован, опубликован в блоге и т. Д., Мне тоже это кажется немного странным). Если вы не укажете модель или передадите null
, она будет использовать модель родительской страницы. Чтобы избежать этого, вы можете использовать оператор объединения нулей:
<% Html.RenderPartial("Foo", Model.FooBar1 ?? new Foo()); %>
И если вам действительно интересно, как это реализовано, есть выдержка из соответствующих частей исходного кода ASP.NET MVC 2:
// Renders the partial view with an empty view data and the given model
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model) {
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, model, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
internal virtual void RenderPartialInternal(string partialViewName, ViewDataDictionary viewData, object model, TextWriter writer, ViewEngineCollection viewEngineCollection) {
if (String.IsNullOrEmpty(partialViewName)) {
throw new ArgumentException(MvcResources.Common_NullOrEmpty, "partialViewName");
}
ViewDataDictionary newViewData = null;
if (model == null) {
if (viewData == null) {
newViewData = new ViewDataDictionary(ViewData);
}
else {
newViewData = new ViewDataDictionary(viewData);
}
}
else {
if (viewData == null) {
newViewData = new ViewDataDictionary(model);
}
else {
newViewData = new ViewDataDictionary(viewData) { Model = model };
}
}
ViewContext newViewContext = new ViewContext(ViewContext, ViewContext.View, newViewData, ViewContext.TempData, writer);
IView view = FindPartialView(newViewContext, partialViewName, viewEngineCollection);
view.Render(newViewContext, writer);
}
Обратите внимание, как обрабатывается случай нулевой модели.