別のモデルのリストを持つこのモデルがあります。次に、私の見解では、メイン モデルのいくつかのフィールドに入力するフォームがあります。しかし、私はこのフォームに他のタイプの X モデルも追加できるようにして、すべて配線できるようにしたいと考えています。これを適切に行う方法を考えています。
だからここに私の2つのモデルがあります:
public class MyMainModel
{
public int MyMainId { get; set; }
[Required(ErrorMessage = "Groovy name required")]
[Display(Name = "MyMainModel's groovy name:")]
public string Name { get; set; }
public List<MySubModel> MySubModels { get; set; }
}
public class MySubModel
{
public int MySubId { get; set; }
[Required(ErrorMessage = "Cool name required")]
[Display(Name = "MySubModel's cool name:")]
public string Name { get; set; }
}
「作成」ビューのコントローラーを押すと、次のアクションが実行されます。
public ActionResult SomePageAboutCreating()
{
// [...] Some other stuff
return View(new MyMainModel());
}
これで、強く型付けされたビューに送信されます。
@model myFunProject.WebModels.MyMainModel
<div>
<form id="my-create-form" onsubmit="CreateMyMainModel(this); return false;">
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<div class="result" style="background-color: silver;">This is the operation result box</div>
<img class="loading" src="/Images/ajax-loader.gif" alt="Loading..." width="16" height="16" style="display: none;" />
<section>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</section>
<!-- Here begins the fields for my list of "MySubModel" -->
@Html.EditorFor(x => x.MySubModels)
<!-- Here I'm thinking about a javascript that will add the previous fields X times so that the user can create "MyMainModel" as well as x times "MySubModel"... -->
<input type="submit" class="btn-send" id="my-create-form-submit" value="Send" />
</form>
</div>
ここで EditorTemplates を使用する必要があると思います... /Views/EditorTemplates/MySubModels.cshtml (「MyMainModel」のプロパティに対して名前が付けられています) でセットアップし、そこにフォームを書き込むと、混乱している...
@model myFunProject.WebModels.MyMainModel
@*<section>
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)
</section>*@
だからここに何を入れたらいいのかわからない... Name プロパティを「MySubModel」のプロパティにしたい。そして、ユーザーがこのフォームを見たときに、たとえば次のシナリオを実行するとします。
- 「MyMainModel」の名前を入力します。
- 別の名前ボックスに移動し、"MySubModel.
- 次に、dom を操作して別の MySubModel.Name フィールドを追加する特別なボタンをクリックします。
- 彼は 2 番目の「MySubModel」名を書きます。
- 彼は送信をクリックします。
そこに配置した ajax 呼び出しを接続しても問題ありませんが、エディター テンプレート用に記述しなければならないコードに混乱が生じ、新しいテンプレートをどのように作成するかについても考えていますフィールド (たとえば、その 2 番目の「MySubModel」の場合...)。
これに近い主題に関する多くの記事を調べましたが、まだこのケースを見つけていません。ありがとう!
編集:
フォームが送信されたときに ajax によって呼び出されるアクション (非常に単純化されたバージョンです) を追加します。
public ActionResult CreateMyMainModel(MyMainModel myMainModel) {
// [...] Do stuff like save to database...
// var aGroovyNAme = myMainModel.Name;
foreach(var mySubModel in myMainModel.MySubModels) {
// Here I would have the sub models available to manipulate...
// var aCoolName = mySubModel.Name;
}
return Content("ok");
}