在MVC模型中使用Sitecore文件

时间:2016-11-07 08:16:47

标签: asp.net-mvc model sitecore mapper

我观看了一些关于实现IRenderingModel接口和继承renderingModel类的视频,以便在MVC模型中使用Sitecore数据模板字段(如https://www.youtube.com/watch?v=dW_rQp9bMmE&index=2&list=PL1jJVFm_lGnweAZ0jF1SgfooRv3h9jiEY) 但据我所知,在MVC方面,所有属性都声明为HtmlString;因此,我正在寻找一种在MVC模型中使用Sitecore字段的有效方法

以下是定义的数据模板:

新闻

标题文字
说明RichText
图像图像
类别MultiList

分类

标题文字
ID Int

2 个答案:

答案 0 :(得分:0)

您可以做的最好的事情是Habitat及其工作方式。

是一个包含一些Sitecore最佳实践的演示项目,因此您可以以最佳方式学习。

您正在观看的视频不是正确的方式,或者至少不是大多数Sitecore开发人员处理的方式。

从栖息地开始,有一些有用的videos可以开始使用。这需要一些时间才能开始,但我认为这是您继续前进的最佳方式。

希望它有所帮助。

答案 1 :(得分:0)

当内容来自MVC控制器时,您希望它能够在编辑器中编辑sitecore项目。您要做的是将可编辑字段转换为IHtmlString(Html字段)并将其发送到UI。然后,如果页面处于编辑模式,则显示可编辑文本。否则,只显示值(文本字段)。

您也可以发送HTML字段,让编辑器在编辑模式下显示可编辑内容。

但是为了把它带到Jammy所说的话,Glass Mapper使用@Editable字段做了所有这些。

TestController.cs

using Bonfire.Feature.Header.Models;
using Sitecore.Mvc.Controllers;

namespace Sitecore.Feature.Header.Controllers
{
    public class TestController : SitecoreController
    {
        public ActionResult Header()
        {
            var item = Sitecore.Context.Database.GetItem("/sitecore/content/settings/header");

            var header = new HeaderModel
            {
                Header = new StringModel
                {
                    Text = item.Fields["HeaderText"].Value,
                    Html = new MvcHtmlString(Sitecore.Web.UI.WebControls.FieldRenderer.Render(item, "HeaderText"))
                }
            };

            return null;
        }
    }
}

HeaderModel.cs

namespace Sitecore.Feature.Header.Models
{
    public class HeaderModel
    {
        public StringModel Header { get; set; }
    }
}

StringModel.cs

using System.Web;

namespace Sitecore.Feature.Header.Models
{
    public class StringModel
    {
        public string Text { get; set; }
        public IHtmlString Html { get; set; }
    }
}

Header.cshtml

@model Sitecore.Feature.Header.Models.HeaderModel

@if (Sitecore.Context.PageMode.IsExperienceEditor)
{
    <div>
        @Model.Header.Text
    </div>
}
else
{
    <div>
        @Model.Header.Html
    </div>
}