我观看了一些关于实现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
答案 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>
}