ページをリロードせずに、MVC ページ モデル内に含まれるリストに項目を追加する方法を考えています。
下の図に示すようなフォームがあります。このページは、「連絡先」のリストを持つ「申請者」モデルから実行されます。
「アプリケーション」を実行する場合、ユーザーは複数の「連絡先」を追加できる必要があります。「プラス」記号をクリックすると、新しい「連絡先」項目がリストに追加されます。
http://i.stack.imgur.com/DUvb7.png
複数の方法 (Actionlinks など) を試しましたが、すべての方法でページがリダイレクトされるようです。
誰かがこれに光を当てるのを助けることができれば、それは大歓迎です
これは私のモデルの縮小例です
public class ApplicantMessage : PersonMessage
{
//... Other properties here
public virtual ICollection<ContactMessage> Contacts { get; set; }
}
これは、「連絡先」の詳細を定義する div 領域です (注: ここで @Html.TextBoxFor(..) を使用するかどうか、または使用する方法がわかりませんでした)
<!-- Other Contacts -->
<div class="row">
<div class="span2">
<label class="label">Other Contacts</label>
</div>
<div class="span4">
<input type="text" class="new-contact-details"/>
</div>
</div>
<div class="row">
<div class="span2"></div>
<div class="span4">
@Html.DropDownList("contactMethodDropdown", default(ContactMethod).ValueList(), new{@class="dropdown-slim"})
<input type="text" class="new-contact-contact-details"/>
<a rel="tooltip" href="#" data-original-title="Add a contact" class="icon-plus"></a>
</div>
</div>
これは私のコントローラーです
public class ApplicationController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult NewApplication()
{
var message = new ApplicantMessage();
return View(message);
}
[HttpPost]
public ActionResult NewApplication(ApplicantMessage message)
{
if (ModelState.IsValid)
{
//add to DB
}
return View(message);
}
}
また、連絡先をページの右側に表示する必要があることにも注意してください。ある種の部分ビューを使用してそれが行われると思いますか?