0

我正在使用 Umbraco 6,并且正在使用新的 MVC 架构。我有一个文档类型视图模板,它有一个视图模型,它是实例化的,并且它的属性是从控制器填充的。其中一个属性是集合,在视图模板中,我遍历集合并使用'Html.Partial("partialName", modelObject)' 渲染出具有单独视图模型的部分视图

我遇到的奇怪问题是,首先,在 Visual Studio 中,我收到 ReSharper 警告,告诉我它无法解析具有该名称的局部视图(我检查了 50 次并且拼写正确)。此外,当我然后导航到该页面时,我得到了可靠的“对象引用未设置为对象的实例”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 解决方案树的屏幕截图:

Visual Studio 解决方案屏幕截图

'NewHomes.cshtml' 文档类型视图模板是从 NewHomesController 返回的,并且视图正在调用从 Umbraco 后台创建并自动放置的“PropertySearchResultDesktop.cshtml”部分视图。

Umbraco 网站说你可以而且应该把你的部分观点放在这里

http://our.umbraco.org/Documentation/Reference/Mvc/partial-views

但无论我尝试做什么,它都不会渲染局部。我在 SO 上看到了另一个关于此的问题,但答案只是将它放在 MacroPartials 中,作为在 Umbraco 6 中使用局部视图的好处的一部分,我不想这样做,因为它们继承自 UmbracoViewPage,具有很强的类型化模型声明,MacroPartials 没有。

有没有人遇到过这个?

4

1 回答 1

0

固定的。问题在于我从控制器传递给文档类型视图的模型。

在 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-applicio

此外,作为旁注,我仍然收到 ReSharper 警告“无法解析部分视图 PropertySearchResultDesktop”,但我认为这是 ReSharper 错误而不是错误。

即使调用中有完整的路径和文件扩展名,它仍然会抱怨。

我确实觉得很奇怪,尽管在调试时,即使使用我的旧控制器代码,在模型绑定阶段或控制器内部或视图中都没有引发异常,直到它进入 Html.Partial 调用。

无论如何,我希望这可以帮助任何有同样问题的人。

于 2013-07-19T09:45:53.380 回答