考えられる戦略は、1 つのモーダル ダイアログのみに html を使用し、文字列のすべての長いバージョンを、ハッシュ配列などの何らかの JavaScript データ構造に格納することです。これにより、何百ものモーダル ダイアログの HTML によってページが肥大化するのを防ぐことができます。
次に、ユーザーが「長いバージョンを表示」リンクをクリックすると、モーダル ダイアログ内の内部テキストを、ハッシュ配列から取得した適切な「長いバージョン」の文字列に置き換えて表示するクエリがあります。ダイアログ。
もっと手の込んだものにしたい場合は、短いバージョンの文字列のみをページにロードし、ユーザーがリンクをクリックすると、AJAX を介して「長いバージョン」の文字列を取得します。
Twitter Bootstrap には Modal Dialog (こちらを参照) が付属しており、JQuery には要素に HTML を挿入するためのメソッドがいくつかあります (こちらを参照) 。
Twitter Bootstrap Modal Dialog のドキュメントを見ると、remote:
オプションを使用して AJAX 経由でリモートでデータをロードできることがわかります。
以下は、AJAX 経由でこれを行うために Twitter ブートストラップを利用する方法の大まかな例です。
コントローラー
public ActionResult Index()
{
var model = GetLongStrings();
return View(model);
}
public ActionResult FindLongString(string shortString)
{
var longStrings = GetLongStrings();
var longStringToReturn = longStrings
.FirstOrDefault(x => x.StartsWith(shortString));
return Content(longStringToReturn);
}
次に、ビューは次のようになります
@foreach (var result in results)
{
var shortString = result.Substring(0, 5);
<section>
<div class="row-fluid">
<div class="span12">@shortString</div>
@Html.ActionLink("See long version", "FindLongString",
new { shortString = shortString },
new { data_toggle = "modal",
data_target = "#myModal",
aria_hidden = "true" })
</div>
</section>
}
<div id="myModal" class="modal hide fade">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3>Modal header</h3>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
</div>
</div>
ActionLink のデータ属性は、ダイアログに使用するオプションを Twitter Bootstrap に指示するため、重要です。
コード例は、各文字列に ID があれば改善される可能性がFindLongString
あります。つまり、`int をパラメーターとして受け入れることができます。つまり、これを ActionLink に渡すだけで済みます。