我在Piranha CMS安装中创建了几个自定义区域,但是当我在自定义区域中有任何类型的文本区域时,我遇到了问题。编辑器将显示,您可以输入文本,但不会保存到数据库。
这是我的课程
using System;
using System.ComponentModel.Composition;
using Piranha.Extend;
using Piranha.Extend.Regions;
namespace MatchtechGroup.Models.Regions
{
[Export(typeof(IExtension))]
[ExportMetadata("InternalId", "SimpleTab")]
[ExportMetadata("Name", "Simple Tab")]
[ExportMetadata("Type", ExtensionType.Region)]
[Serializable]
public class SimpleTab : Extension, ITab
{
public string Title { get; set; }
public HtmlRegion Tab { get; set; }
public SimpleTab()
{
Tab = new HtmlRegion();
}
}
}
我在区域/经理/观看/扩展中的经理模板
@model MatchtechGroup.Models.Regions.SimpleTab
@{
Layout = "";
}
<ul class="form">
<li>
@Html.LabelFor(m => m.Title)
<div class="input">@Html.TextBoxFor(m => m.Title)</div>
</li>
<li>
@Html.TextAreaFor(m => m.Tab, new { @class = "editor", @rows = 10 })
</li>
</ul>
管理器界面在页面编辑器中正确呈现我的新区域,但不会保存来自Html区域的内容。界面中没有显示错误,我只是没有显示“此页已保存”消息栏,或者我是否能够发布该页面。
任何帮助都会非常感激,感觉我错过了一些基本的东西,或者只是因为我无法在这个自定义区域中嵌套HTML区域。
由于
答案 0 :(得分:1)
问题可能是您的HtmlValue在Model Binder中失效,因此Model.IsValid为false。解决您问题的最简单方法是将您的财产更改为:
public class SimpleTab : ...
{
public string Title { get; set; }
public string Tab { get; set; }
}
唯一的区别是在Razor标记中使用它。如果你有一个名为 MyTab 的SimpleTab类型的区域,那么语法将是(例如):
<div>
<h3>@Model.Regions.MyTab.Title</h3>
<div class="content">
@Html.Raw(Model.Regions.MyTab.Tab)
</div>
</div>
唯一的区别是@Html.Raw()
以确保身体不会被转义。
此致
/Håkan