Umbraco 自定义控制器不使用声明的模型类型

问题描述 投票:0回答:1

Umbraco 9 - 我创建了一个名为 SiteSearch 的页面类型和一个控制器来劫持对该页面类型页面的请求。这一切都正常工作。

控制器从一个非常简单的搜索服务获取 IEnumerable 并将其设置在 ViewModel 上,然后将其传递给视图。

但是,我根本无法获得尊重模型声明的观点。我收到错误:

ModelBindingException:无法绑定源类型 MyProject.ViewModels.SiteSearchViewModel 到模型类型 Umbraco.Cms.Core.Models.PublishedContent.IPublishedContent.

它似乎迫使我的视图使用实例 IPublishedContent (单数),即使我将模型声明为我的自定义对象。我尝试将模型声明更改为字符串只是为了看看会发生什么:

InvalidOperationException:模型项传入 ViewDataDictionary 的类型 'MyProject_Web.ViewModels.SiteSearchViewModel',但是这个 ViewDataDictionary 实例需要类型的模型项 '系统.字符串'。

它识别了模型,但是当我将自定义对象声明为模型时,它又回到尝试绑定到 IPublishedContent (单数)。我已经验证我传递的模型不为空并且实际上有结果。我不知道还能尝试什么。谁能帮我理解为什么会发生这种情况?

SiteSearchController 操作:

public override IActionResult Index()
    {
        var searchPage = new SiteSearch(CurrentPage, _publishedValueFallback);
        var results = _searchService.QueryUmbraco("about");
        var viewModel = new ViewModels.SiteSearchViewModel();
        viewModel.Results = results;
        return View("~/Views/SiteSearch/index.cshtml", viewModel);
    }

查看:

@model MyProject_Web.ViewModels.SiteSearchViewModel
@{
    Layout = "/Views/Main.cshtml";
}
<h1>Site Search Page</h1>

视图模型:

public class SiteSearchViewModel
    {
        public IEnumerable<IPublishedContent> Results { get; set; }
    }
asp.net-core model-view-controller umbraco
1个回答
1
投票

我刚刚想通了。我的布局视图中有以下行:

@inherits Umbraco.Cms.Web.Common.Views.UmbracoViewPage

一旦我删除了它,我就不再收到错误了。它一定是强制 ViewModel 成为 IPublishedContent。

© www.soinside.com 2019 - 2024. All rights reserved.