2
간단한 위젯을 만드는 데 약간의 문제가있었습니다. MediaPickerField 및 2 int 및 2 문자열 필드가있는 위젯을 만들면됩니다.이 필드는 파트를 사용하여 데이터베이스에 저장됩니다. 모든 것은 광고 된대로 작동합니다. 네 개의 필드가 저장되지 않는다는 것을 제외하고 ContentRecord가 생성되고 이미지 필드가 올바르게 저장됩니다. 로그에 오류가 없으며 이것이 왜 발생하는지 알 수 없습니다. 누구도 전에 이것을 보았습니까? 고맙습니다.과수원 단순 위젯 데이터베이스 값을 저장하지 않음
Migration.cs
public int UpdateFrom1()
{
SchemaBuilder.CreateTable("SchoenNavButtonPartRecord",
table => table.ContentPartRecord()
.Column<string>("Url", col=> col.WithLength(2140))
.Column<string>("Text")
.Column<int>("ButtonWidth")
.Column<int>("ButtonHeight"));
ContentDefinitionManager.AlterTypeDefinition("SchoenNavButton", builder =>
builder.WithPart("CommonPart")
.WithPart("SchoenNavButtonPart")
.WithPart("TitlePart")
.Creatable());
ContentDefinitionManager.AlterPartDefinition("SchoenNavButtonPart", builder =>
builder.WithField("ButtonImage", field=>
field.OfType("MediaPickerField")
.WithDisplayName("Button Image")
.WithSetting("Hint", "Select Image for Button")));
return 2;
}
PartRecord
public class SchoenNavButtonPartRecord : ContentPartRecord
{
public virtual string Url { get; set; }
public virtual string Text { get; set; }
public virtual int ButtonWidth { get; set; }
public virtual int ButtonHeight { get; set; }
}
부
public class SchoenNavButtonPart : ContentPart<SchoenNavButtonPartRecord>
{
public string Url { get; set; }
public string Text { get; set; }
[DefaultValue(296)]
public int ButtonWidth { get; set; }
[DefaultValue(188)]
public int ButtonHeight { get; set; }
}
처리기
public class SchoenNavButtonHandler : ContentHandler
{
public SchoenNavButtonHandler(IRepository<SchoenNavButtonPartRecord> buttonImageLinkRepository)
{
Filters.Add(StorageFilter.For(buttonImageLinkRepository));
}
}
드라이버
public class SchoenNavButtonPartDriver : ContentPartDriver<SchoenNavButtonPart>
{
public SchoenNavButtonPartDriver()
{
}
protected override string Prefix
{
get
{
return "SchoenNavButton";
}
}
protected override DriverResult Display(SchoenNavButtonPart part, string displayType, dynamic shapeHelper)
{
var fields = ((ContentPart) part).Fields.OfType<MediaPickerField>();
MediaPickerField mediaPickerField = null;
if(fields.Any())
{
mediaPickerField = fields.ElementAt(0);
}
return ContentShape("Parts_SchoenNavButton",
() => shapeHelper.Parts_SchoenNavButton(
SchoenNavButtonPart: part,
ImageUrl: mediaPickerField == null ? "#" : mediaPickerField.Url
));
}
protected override DriverResult Editor(SchoenNavButtonPart part, dynamic shapeHelper)
{
return ContentShape("Parts_SchoenNavButton_Edit",() =>
shapeHelper.EditorTemplate(
TemplateName: "Parts/SchoenNavButton",
Model: part,
Prefix: Prefix));
}
protected override DriverResult Editor(SchoenNavButtonPart part, Orchard.ContentManagement.IUpdateModel updater, dynamic shapeHelper)
{
updater.TryUpdateModel(part, Prefix, null, null);
return Editor(part, shapeHelper);
}
}
EditorTemplage
@model FishySoftware.SchoenBuilders.Models.SchoenNavButtonPart
<fieldset>
<legend>Button Details</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Url, T("Url"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Url)
@Html.ValidationMessageFor(model => model.Url)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Text, T("Text"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ButtonWidth, T("Button Width"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.ButtonWidth)
@Html.ValidationMessageFor(model => model.ButtonWidth)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ButtonHeight, T("Button Height"))
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.ButtonHeight)
@Html.ValidationMessageFor(model => model.ButtonHeight)
</div>
</fieldset>
는 게시물 편집기 방법에 중단 점을 넣고 TryUpdatemodel에 대한 호출이 실제로 일부 변경되어 있는지 확인합니다. –