首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将IEnumerable<Category>作为Sitecore ViewRendering模型传递

如何将IEnumerable<Category>作为Sitecore ViewRendering模型传递
EN

Stack Overflow用户
提问于 2016-11-11 09:31:27
回答 1查看 519关注 0票数 0

假设您在MVC中有一个名为Category的模型类(它有id和name字段)

有没有办法将IEnumerable<Category>作为视图渲染模型返回到MVC视图文件?

EN

回答 1

Stack Overflow用户

发布于 2016-11-14 22:52:52

在Sitecore中,您有几个选择可以将数据放到MVC视图中。我下面的所有例子都来自社区MVC项目,可供您审阅。可以在这里找到:

https://github.com/Sitecore-Community/sample-sitecore-mvc

查看渲染

来做你想做的事情,在视图渲染中拥有一个自定义模型。您需要创建一个继承自IRenderingModel的模型。使用IRenderingModel需要有一个名为Initialize的函数。在Initialize中,您将创建构建IEnumberable所需的逻辑。如果希望类别的详细信息是可编辑的,则需要确保将模型字段作为HtmlString类型返回。

我想指出的是,大多数开发人员不使用这种方法,因为它是不可测试的。

代码语言:javascript
复制
   public class Car : IRenderingModel
   {
        public HtmlString Make { get; set; }
        public HtmlString Model { get; set; }

        // Rendering represents the context rendering - this particular model is only ever used by View Renderings
        public Sitecore.Mvc.Presentation.Rendering Rendering { get; set; }

        // Item represents the rendering's datasource, and PageItem represents the context page
        // These properties exist on Sitecore's own RenderingModel object
        public Item Item { get; set; }
        public Item PageItem { get; set; }

        public void Initialize(Sitecore.Mvc.Presentation.Rendering rendering)
        {
            // Use the Rendering object passed in by Sitecore to set the datasource Item and context PageItem properties
            Rendering = rendering;
            Item = rendering.Item;
            PageItem = PageContext.Current.Item;

            // Set property values using FieldRenderer to ensure that the values are editable in the Page Editor
            Make = new HtmlString(FieldRenderer.Render(Item, "Make"));
            Model = new HtmlString(FieldRenderer.Render(Item, "Model"));
        }
    }

然后在/sitecore/layout/Models中创建一个用于渲染的新模型。在type字段中,您可以指定上面创建的模型。在本例中,它是MVC.Data.Models.Car。

最后,在视图呈现中,指定模型类并使用model数据。

代码语言:javascript
复制
@model MVC.Data.Models.Car

<!-- To set the 'Background' parameter, go into the Page Editor > select 'Design' mode, click on the Featured Car component > 
    click More > click Edit component properties > Scroll down to the 'Parameters' section -->

<div class="highlight" style="background-color: #@Model.Rendering.Parameters["Background"]">
    <h3>This week's featured car</h3>    
    <p><strong>Model:</strong> @Model.Model</p>
    <p><strong>Make:</strong> @Model.Make</p>
</div>

控制器渲染

在大多数情况下,当您有自定义数据时,我建议使用控件呈现。它是干净的,可重用的和可测试的。

模型

创建要使用的渲染的传统模型。

代码语言:javascript
复制
namespace MVC.Data.Models
{
    /// <summary>
    ///  This light-weight model is used as an example of how you can isolate Sitecore-dependent code into a repository, which
    ///  means your models have no dependency on Sitecore and look much more like regular ASP.NET MVC models. See DriverController.cs
    ///  for usage.
    /// </summary>
    public class Driver
    {
        public HtmlString Name { get; set; }
        public HtmlString Text { get; set; }
        public HtmlString Image { get; set; }
    }
}

查看模型

在该示例中,作者创建了一个View model,其中包含驱动程序模型,以及有关渲染的信息,如数据源项。

代码语言:javascript
复制
public class DriverViewModel
{
    public Driver Driver { get; set; }

    public string Background { get; set; }

    public Item ContextItem { get; set; }
}

控制器

然后创建一个控制器/存储库来填充该模型。最后将其传递给渲染。

代码语言:javascript
复制
public ActionResult Featured()
{
var repository = _driverRepository;

var driver = repository.GetDriver();
var driverViewModel = repository.GetDriverViewModel(driver);

return View(driverViewModel);
}

渲染

代码语言:javascript
复制
@model MVC.Data.Models.DriverViewModel

<!-- To set the 'Background' parameter, go into the Page Editor > select 'Design' mode, click on the Featured Driver component > 
    click More > click Edit component properties > Scroll down to the 'Parameters' section -->

<div class="highlight" style="background: #@Model.Background">
    <h3>This week's featured driver</h3>
    <p><strong>Name:</strong> @Model.Driver.Name</p>
    <p><strong>Description:</strong></p> @Model.Driver.Text
</div>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40539842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档