我使用的是Umbrco6,并且使用的是新的MVC架构。我有一个文档类型视图模板,它有一个实例化的视图模型,并从控制器填充了它的属性。其中一个属性是集合,在视图模板中,我使用'Html.Partial("partialName",modelObject)‘遍历集合并使用单独的视图模型呈现局部视图。
我遇到的奇怪问题是,首先,在Visual Studio中,我收到一个ReSharper警告,告诉我它无法解析具有该名称的部分视图(我已经检查了50次,并且拼写正确)。此外,当我随后导航到页面时,我得到了可信的ol‘“对象引用没有设置为一个对象的实例”YSOD。
我已经调试了代码,并且控制器操作正常,实例化文档类型模板的视图模型的逻辑工作正常,并且正确地填充了属性,我还确保属性仍然在视图中设置,并且用于呈现集合项的循环正确地实例化每个集合项的视图模型对象,并正确地设置属性。当它命中Html.Partial时它就会崩溃。
文档类型视图代码如下:
@foreach (KeyValuePair<decimal, IPublishedContent> result in Model.Results)
{
PropertySearchResultViewModel model = ObjectMapper.SearchResultToViewModel(result);
Html.RenderPartial("PropertySearchResultDesktop", model);
}下面的部分视图代码:
@using Production.Umbraco.Extensions.Models.ViewModels;
@inherits UmbracoViewPage<PropertySearchResultViewModel>
<article id="property-result-@Model.Node.Id.ToLower()">
<p>@Model.Node.Name</article>
<p>Distance: @Model.Distance Miles</p>
</article>以下是我的VS解决方案树的屏幕截图:

从NewHomesController返回'NewHomes.cshtml‘文档类型视图模板,视图调用'PropertySearchResultDesktop.cshtml’局部视图,该视图是从Umbraco后台创建的,并被自动放置。
Umbraco网站说你可以也应该把你的局部视图放在这里
http://our.umbraco.org/Documentation/Reference/Mvc/partial-views
但无论我怎么做,它都不会渲染部分。我在SO上看到了另一个关于这个的问题,但答案是把它放在MacroPartials中,我不想这样做,因为在Umbrco6中使用分部视图的好处是它们继承了UmbracoViewPage的强类型模型声明,而MacroPartials没有。
以前有没有人遇到过这种情况?
发布于 2013-07-19 17:45:53
已修复。问题出在我从控制器传递给文档类型视图的模型上。
在Umbraco文档中提到,您可以创建一个控制器来劫持Umbraco路由,并使用自定义模型提供您自己的视图,如下所示:
public ActionResult Index(RenderModel model)
{
SearchResultsViewModel viewModel = new SearchResultsViewModel
return CurrentTemplate(viewModel);
}在我看来,我有:
@inherits UmbracoViewPage<SearchResultsViewModel>但是,似乎为了做到这一点,您必须确保您的自定义视图模型继承自RenderModel,并使用一个构造函数将RenderModel作为参数,然后在基本对象上设置一些属性,如下所示:
public class SearchResultsViewModel :RenderModel
{
public SearchResultsViewModel(RenderModel model) : base(model.Content, model.CurrentCulture)
{
}
}以前,我的视图模型没有从任何东西继承,并且有一个无参数的构造函数。
这篇文章让我找到了正确的答案。
http://www.ben-morris.com/using-umbraco-6-to-create-an-asp-net-mvc-4-web-applicatio
另外,作为附注,我仍然收到“无法解析部分视图PropertySearchResultDesktop”的ReSharper警告,但我认为这是ReSharper错误而不是错误。
即使调用中有完整的路径和文件扩展名,它仍然会报错。
我确实发现奇怪的是,在调试时,即使使用我的旧控制器代码,在模型绑定阶段、控制器内部或视图中都没有抛出异常,直到它进入Html.Partial调用。
无论如何,我希望这对任何有同样问题的人有所帮助。
https://stackoverflow.com/questions/17721350
复制相似问题