私はオーチャードの初心者です。新しいアイテムが作成されたときにフォームデータを取得しようとしています。オーチャードのポストバックにデータを保存する
私が持っているのは、管理ダッシュボードにメニュー項目を作成するモジュールです。そのメニュー項目は、ユーザーが新しい「コーチ」を入力できるページをロードします。
コーチ、姓、名字、メールには3つのものが必要です。エディタ
@{ Layout.Title = T("Add Coach").ToString(); }
@using (Html.BeginFormAntiForgeryPost()) {
// Model is a Shape, calling Display() so that it is rendered using the most specific template for its Shape type
@Display(Model)
}
を作成するための
ここで私はこのために実装したコードだ...
migrations.cs
public class SDSDataMigration : DataMigrationImpl
{
public int Create()
{
SchemaBuilder..CreateTable("CoachPartRecord", table => table.ContentPartRecord()
.Column("FirstName", DbType.AnsiString, c => c.WithLength(50))
.Column("LastName", DbType.AnsiString, c => c.WithLength(50))
.Column("Email", DbType.AnsiString, c => c.WithLength(200)))
ContentDefinitionManager.AlterPartDefinition("CoachPart", part => part
.WithField("FirstName", f => f.OfType("TextField"))
.WithField("LastName", f => f.OfType("TextField"))
.WithField("Email", f => f.OfType("TextField"))
);
ContentDefinitionManager.AlterTypeDefinition("Coach", type => type.WithPart("CommonPart")
.WithPart("CoachPart"));
return 1;
}
}
部品/記録
public class CoachPartRecord : ContentPartRecord
{
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string Email { get; set; }
}
public class CoachPart : ContentPart<CoachPartRecord>
{
public string FirstName
{
get { return Record.FirstName; }
set { Record.FirstName = value; }
}
public string LastName
{
get { return Record.LastName; }
set { Record.LastName = value; }
}
public string Email
{
get { return Record.Email; }
set { Record.Email = value; }
}
}
ビューハンドラ(ダッシュボードのメニュー項目の)
public class CoachPartHandler : ContentHandler
{
public CoachPartHandler(IRepository<CoachPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
ドライバ
protected override DriverResult Editor(CoachPart part, IUpdateModel updater, dynamic shapeHelper)
{
updater.TryUpdateModel(part, Prefix, null, null);
return Editor(part, shapeHelper);
}
コントローラ
public ActionResult Create()
{
var coach = _services.ContentManager.New("Coach");
var model = _services.ContentManager.BuildEditor(coach);
return View(model);
}
[HttpPost, ActionName("Create")]
public ActionResult CreatePOST()
{
var contentItem = _services.ContentManager.New("Coach");
_services.ContentManager.Publish(contentItem);
return View("Index");
}
今、私は新監督を作成するために、表示されるフォームを得ることができます。 「公開」をクリックすると、ドライバのCoachPartパラメータのすべてのフィールド(FirstName、LastName、Email)がnullになります。
私はhttpリクエストを見ることができ、私がフォームに入れた値を見ることができますが、彼らはCoachPartに値を渡していません。
CoachPartフィールドが提出されない理由は何ですか?
ありがとうございます!
ありがとうございます!それはそれだった。私はエディタテンプレートを実装する必要がありました。私もコードを変更する必要がありました... _contentManager.Publish(contentItem); 〜 _contentManager.Publish(contentItem.ContentItem); それ以降は保存が開始されました。私は数日間それを追いかけてきました。ありがとう! – cgreathouse