簡単に言うと、Ajax.ActionLink メソッドが呼び出された回数を追跡することは可能ですか?
コンテキストについて説明します。私は単純なモデルを持っています:
public class Person {
public string Name { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address {
public string City { get; set; }
public string Country { get; set; }
}
したがって、人は多くのアドレスを持つことができます。[作成] ページで、ユーザーがボタンをクリックして、必要な数のアドレスを動的に追加できるようにします。
リストに動的にバインドする方法を学習する際の参考として、このページを使用しました: http://haacked.com/archive/2008/10/23/model-binding-toa-list.aspx、
それを参考にして、ここに私のクラスがあります:
ホームコントローラー:
//
// GET: /Home/
public ActionResult Index() {
return View();
}
[HttpPost]
public ActionResult Create(Person p) {
return View(p);
}
[OutputCache(NoStore = true, Duration = 0)]
public ActionResult AjaxAddAddress() {
TempData["key"] = DateTime.Now.Ticks.GetHashCode();
return PartialView("~/Views/Shared/EditorTemplates/Address.cshtml", new Address());
}
インデックス ビュー:
@model ModelTest.Models.Person
<div>
@using (Html.BeginForm("Create", "Home")) {
<div>Name: @Html.TextBoxFor(m => m.Name)</div>
<div id="ajaxAddressBox"></div>
<p>@Ajax.ActionLink("Add Another Address", "AjaxAddAddress", new AjaxOptions {
UpdateTargetId = "ajaxAddressBox",
InsertionMode = InsertionMode.InsertAfter,
HttpMethod = "GET" })</p>
<input id="btnSubmit" type="submit" value="Create" />
}
</div>
ビューの作成 (モデルが正常にバインドされていることを確認するため):
@model ModelTest.Models.Person
<div>
<p>You entered person: @Model.Name.</p>
<p>He has @Model.Addresses.Count total addresses.
@foreach (var c in Model.Addresses) {
<p>City: @c.City, Country: @c.Country</p>
}
</div>
アドレス エディター テンプレート:
@model ModelTest.Models.Address
<p><input type="hidden" name="Addresses.Index" value="@TempData["key"]" />
City: @Html.TextBoxFor(x => x.City, new { Name = "Addresses[" + TempData["key"] + "].City" } )
Country: @Html.TextBoxFor(x => x.Country, new { Name = "Addresses[" + TempData["key"] + "].Country" })</p>
うまくいっているように見えるので、今のところこれを正しく行っていることを願っています。私は MVC を初めて使用するので、何か完全に間違っている場合はお知らせください。
しかし、もっとやる必要があります。理想的には、各行に「Address #(index)」というラベルを追加したいと考えています。しかし、もっと重要なことは、たとえば 5 つのアドレスの追加のみにユーザーを制限する必要があることです。いずれにせよ、Ajax.ActionLink または AjaxAddAddress メソッドが呼び出された回数を追跡したいと思います。さらに、将来的には、その制限も必要とする編集ページが必要になります。したがって、既存の人が 3 つのアドレスを持っている場合、追加できるのは 2 つだけです。
何かアドバイス?それは簡単に思えますが、どのようにアプローチするのが最善かわかりません。隠しフィールドを使用した場合、その値を Ajax.ActionLink に渡し、AjaxAddAddress メソッドで読み取るにはどうすればよいですか? どうにかしてローカル クライアント変数を作成できますか?
セッション変数が機能すると思いますが、それを使用すると、その寿命や信頼性がわからず、いつも緊張します。