次のようなモデルがあります。
仕事 - ブランチ - 電話(*) - 電話の種類 - 番号 - 営業時間 (*) - 曜日 - 作業期間 (*) - 時間から - 時間に - カスタムフィールド (*) - 名前 - 価値 - 住所 - 住所欄 - 街 - 州 - ジップ -やだやだ
上記のクラス タイプごとにEditor Templateを作成しました。
Business
既存または新しいエンティティの両方に対して、構造全体を単一のアクションに投稿して保存する送信フォームを備えた共通のエディター テンプレートが必要です。
- Editor Templateは正しいアプローチですか? ダウンライン全体に沿ってフォームを送信するにはどうすればよいですか?
- フォーム内の電話番号を追加/削除するための [追加] ボタンと[削除]ボタンを作成するにはどうすればよいですか?
- コレクション内のアイテムを注文するにはどうすればよいですか (つまり、各電話番号の近くに矢印を表示して、ユーザーがクライアント リスト内で上下に移動できるようにしてから、サーバーでの保存を処理できるようにしたいので、既に解決策があります)。
要するに、私の問題は、サーバーにポストされた正しい値を取得する方法と、クライアントで内部コレクションを変更する方法です。適切なデータがこの方法または別の方法でサーバー上にあると、それを処理する方法がわかります。私の問題は、クライアント側とデータ送信の正しい方法です。
アップデート
基本的に私の質問の最初の部分に答えるこの回答を見ましたが、後者の2つはまだ残っています(追加-削除-注文ボタン-クライアントでのコレクションの管理)。
私の問題は、クライアントのDOMで行を追加/削除/並べ替えする方法ではなく、クライアントデータを変更してサーバーで受信する方法です。アクションは次のようになります。
[HttpPost]
public ActionResult Save(Business business)
{
/// blah blah
}
アップデート
新しいデータを押し込む方法は次のとおりです。
意見:
@Ajax.ActionLink("Add", "AddCustomField", new AjaxOptions { UpdateTargetId = "customFields", InsertionMode = InsertionMode.InsertAfter })
アクション:
public PartialViewResult AddOpeningTimes()
{
var ot = new OpeningTimes();
ot.WorkingPeriods.Add(new WorkingPeriod());
var e = EditorFor(ot);
//just here for debugging, the values are both empty strings
e.ViewData.TemplateInfo.HtmlFieldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix;
return e;
}
//this method is on the base controller:
protected PartialViewResult EditorFor<TModel>(TModel model)
{
return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
}
問題はname
、適切なフィールドが必要に応じて列挙されていないため ( Branches[0].CustomField[0].Key
)、代わりに、単にKey
.