を使用したアプローチの 1 つを次に示しEditorTemplate
ます。モデルクラスに小さな変更を加えました(これは機能しますが、これは概念を理解するためだけのものであることに注意してください。これを拡張できます)
モデル
public class SomeExampleModel
{
public int Id { get; set; }
public string Name { get; set;}
public string Street { get; set; }
public IList<Contact> Contacts { get; set; }
}
public class Contact
{
public int Id { get; set; }
public int SomeExampleModelId { get; set; }
public ContactType Type { get; set; }
public string ContactText { get { return Type.ToString(); } }
public string ContactValue { get; set; }
}
public enum ContactType
{
email,
Phone,
mobile,
fax
}
ContactText
列挙型テキストを返すプロパティを作成したことに注意してください(表示用)。
Contact のエディター テンプレートを作成します (名前はContact.cshtml
; テンプレート名はクラス名と一致する必要があります)。エディター テンプレートを配置する場所のスクリーン ショットの下を見つけます。
ここにコードがありますContact.cshtml
@model Test1.Models.Contact
<table>
@Html.HiddenFor(a=>a.Type)
<tr>
<td>@Html.Label(Model.ContactText)</td>
<td>@Html.TextBoxFor(a => a.ContactValue)</td>
</tr>
</table>
「作成」ビューのコードは次のとおりです(ExampleCreateView.cshtml
私の場合)
@model Test1.Models.SomeExampleModel
@{
ViewBag.Title = "ExampleCreateView";
}
<h2>ExampleCreateView</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>SomeExampleModel</legend>
@Html.HiddenFor(model=>model.Id)
<table>
<tr>
<td>@Html.LabelFor(model=>model.Name)</td>
<td>@Html.EditorFor(model=>model.Name)</td>
</tr>
<tr>
<td>@Html.LabelFor(model=>model.Street)</td>
<td>@Html.EditorFor(model=>model.Street)</td>
</tr>
<tr>
<td>@Html.LabelFor(model=>model.Contacts)</td>
<td>@Html.EditorFor(model=>model.Contacts)</td>
</tr>
</table>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
私が@Html.EditorFor
そのContacts
物件をどのように使用したかをメモしておいてください。
Get、Post アクションは次のようになります。
public ActionResult ExampleCreateView()
{
SomeExampleModel model = new SomeExampleModel();
Contact contactEmail = new Contact();
contactEmail.Type = ContactType.email;
Contact contactFax = new Contact();
contactFax.Type = ContactType.fax;
Contact contactPhone = new Contact();
contactPhone.Type = ContactType.Phone;
Contact contactMobile = new Contact();
contactMobile.Type = ContactType.mobile;
List<Contact> contacts = new List<Contact>();
contacts.Add(contactEmail);
contacts.Add(contactFax);
contacts.Add(contactPhone);
contacts.Add(contactMobile);
model.Contacts = contacts;
return View(model);
}
[HttpPost]
public ActionResult ExampleCreateView(SomeExampleModel model)
{
//Your operations
return View(model);
}
アプリケーションを実行します。景色はこんな感じ
POST アクションで得られるもののスクリーン ショット