asp.net-mvc – Orchard CMS:未显示内容部分
发布时间:2020-12-16 03:30:06 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个内容部分,并将其添加到内容类型. 当我创建内容类型时,与其他字段不同,不显示内容部分. 没有编译或记录的错误,内容部分已添加到placement.info. 司机: [UsedImplicitly]public class TradeItemPartDriver: ContentPartDriverTradeItemPart{ priv
|
我创建了一个内容部分,并将其添加到内容类型.
当我创建内容类型时,与其他字段不同,不显示内容部分. 没有编译或记录的错误,内容部分已添加到placement.info. 司机: [UsedImplicitly]
public class TradeItemPartDriver: ContentPartDriver<TradeItemPart>
{
private readonly ITradeItemService _tradeItemService;
private const string TemplateName = "Parts/TradeItem";
public TradeItemPartDriver(ITradeItemService tradeItemService)
{
_tradeItemService = tradeItemService;
}
protected override string Prefix
{
get { return "TradeItem"; }
}
protected override DriverResult Display(
TradeItemPart part,string displayType,dynamic shapeHelper)
{
return ContentShape("Parts_TradeItem",() => shapeHelper.Parts_TradeItem(
ContentPart: part));
}
protected override DriverResult Editor(
TradeItemPart part,dynamic shapeHelper)
{
var shape = ContentShape("Parts_TradeItem_Edit",() => shapeHelper.EditorTemplate(
TemplateName: TemplateName,Model: BuildEditorViewModel(part),Prefix: Prefix));
return shape;
}
protected override DriverResult Editor(
TradeItemPart part,IUpdateModel updater,dynamic shapeHelper)
{
var model = new EditTradeItemViewModel();
updater.TryUpdateModel(model,Prefix,null,null);
if (part.ContentItem.Id != 0)
{
_tradeItemService.UpdateTradeItemForContentItem(
part.ContentItem,model);
}
return Editor(part,shapeHelper);
}
private EditTradeItemViewModel BuildEditorViewModel(TradeItemPart part)
{
var model = new EditTradeItemViewModel
{
Code = part.Code,Cost= part.Cost,Unit = part.Unit,Weight = part.Weight,UnitsList = _tradeItemService.GetUnitTypes()
};
return model;
}
}
处理器: public class TradeItemPartHandler : ContentHandler
{
public TradeItemPartHandler(IRepository<TradeItemPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
楷模: public enum EnumTradeItemUnit : byte
{
Шт = 0,Кг = 1,Литр = 2,Упаковка = 3
}
public class TradeItemPartRecord : ContentPartRecord
{
public virtual string Code { get; set; }
public virtual decimal Weight { get; set; }
public virtual decimal Cost { get; set; }
public virtual int Unit { get; set; }
}
public class TradeItemPart : ContentPart<TradeItemPartRecord>
{
public virtual string Code { get; set; }
public virtual decimal Weight { get; set; }
public virtual decimal Cost { get; set; }
public virtual EnumTradeItemUnit Unit { get; set; }
}
Serveces: public interface ITradeItemService: IDependency
{
//IEnumerable<TradeItemPart> GetTradeItems();
SelectList GetUnitTypes();
void UpdateTradeItemForContentItem(
ContentItem item,EditTradeItemViewModel model);
}
public class TradeItemService : ITradeItemService
{
private readonly IContentManager _contentManager;
private readonly IRepository<TradeItemPartRecord> _tradeItemsRepository;
public TradeItemService(IContentManager contentManager,IRepository<TradeItemPartRecord> tradeItemsRepository)
{
_contentManager = contentManager;
_tradeItemsRepository = tradeItemsRepository;
}
public SelectList GetUnitTypes()
{
return new SelectList(
Enum.GetValues(typeof(EnumTradeItemUnit)).Cast<EnumTradeItemUnit>().Select
(it =>
new SelectListItem() { Value = ((byte)it).ToString(),Text = it.ToString() }));
}
public void UpdateTradeItemForContentItem(
ContentItem item,EditTradeItemViewModel model)
{
var part = item.As<TradeItemPart>();
part.Code = model.Code;
part.Cost = model.Cost;
part.Unit = model.Unit;
part.Weight = model.Weight;
}
}
视图模型: public class EditTradeItemViewModel
{
[StringLength(10),WebDisplayName("Код")]
public virtual string Code { get; set; }
[Required,Range(0,100,ErrorMessage = "Товары тяжелее 100кг пусть более крутые ребята возят"),WebDisplayName("Вес")]
public virtual decimal Weight { get; set; }
[Required,Range(0.01,100000,ErrorMessage = "Товары дороже 100тыс.р. пусть более крутые ребята возят"),WebDisplayName("Цена")]
public virtual decimal Cost { get; set; }
[Required,WebDisplayName("Единица измерения")]
public virtual EnumTradeItemUnit Unit { get; set; }
public virtual SelectList UnitsList { get; set; }
}
?/查看/ EditorTemplates /零件/ TradeItem.cshtml @model Delivery.ViewModels.EditTradeItemViewModel
<fieldset>
<legend>@T("Характеристики")</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Code,T("Код"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Code)
@Html.ValidationMessageFor(model => model.Code)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Unit,T("Единица измерения"))
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.Unit,Model.UnitsList)
@Html.ValidationMessageFor(model => model.Unit)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Cost,T("Стоимость"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Cost)
@Html.ValidationMessageFor(model => model.Cost)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Weight,T("Вес одной единицы"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Weight)
@Html.ValidationMessageFor(model => model.Weight)
</div>
</fieldset>
放置: <Placement> <Place Parts_TradeItem_Edit="Content:10"/> <Place Parts_TradeItem="Content:10"/> </Placement> 迁移: SchemaBuilder.CreateTable("TradeItemRecord",table => table
.ContentPartRecord()
.Column<string>("Code",column => column.WithLength(10))
.Column<decimal>("Weight",column => column.WithPrecision(8).WithScale(2))
.Column<decimal>("Cost",column => column.WithPrecision(8).WithScale(2))
.Column<byte>("Unit")
);
ContentDefinitionManager.AlterPartDefinition("TradeItem",builder => builder.Attachable());
解决方法
您的代码通常有2个问题.
首先,在迁移中,您在模型中调用了TradeItem部分,将其称为TradeItemPart.更改一个或另一个将解决为什么编辑器中没有任何内容出现的问题. 这导致我们第二个问题,它将禁用保存您的任何数据.您没有将TradeItemPart与TradeItemPartRecord连接.要解决此问题,您需要调整TradeItemPart,使其如下所示: public class TradeItemPart : ContentPart<TradeItemPartRecord>
{
public string Code {
get { return Record.Code; }
set { Record.Code = value; }
}
public decimal Weight {
get { return Record.Weight; }
set { Record.Weight = value; }
}
public decimal Cost {
get { return Record.Cost; }
set { Record.Cost = value; }
}
public EnumTradeItemUnit Unit {
get { return (EnumTradeItemUnit)Record.Unit; }
set { Record.Unit = (int)value; }
}
}
我也不确定Orchard是否会正确地将类型字节的列与int类型相关联.如果上述更改不起作用,请尝试将Unit列的列类型更改为int. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.net Bin目录–dll加载
- asp.net-web-api – 在asp.net web api中有两个参数的方法
- ASP.NET – 主页面中的更新面板,内容页面中的刷新按钮
- asp.net-mvc – ASP.NET MVC:从一个视图重定向到另一个视图
- asp.net-mvc – 如何从ASP.NET MVC的部分视图中获取用户(IP
- asp.net – 处理可变数量的表单字段
- asp.net-mvc – 是否有一个ASP MVC与JSTL标签等效?
- asp.net – 压缩不起作用
- asp.net-mvc – asp.net mvc – 子文件夹
- asp.net-mvc-3 – 如何在VIEW MVC3 Razor中显示webforms页面
推荐文章
站长推荐
热点阅读
