一种潜在的策略是让 html 仅用于一个模式对话框,并将字符串的所有长版本都保存在某种 javascript 数据结构中,例如哈希数组或其他东西。这将使您的页面因数百个模式对话框而被 HTML 臃肿
然后,当用户单击“显示长版本”链接时 - 您有一些查询将模式对话框中的内部文本替换为从哈希数组中检索到的字符串的适当“长版本”,然后显示对话。
如果您想变得更高级 - 您只需在页面中加载字符串的短版本,当用户单击链接时,它将通过 AJAX 检索字符串的“长版本”。
Twitter Bootstrap 带有一个模态对话框,请参见此处,而 JQuery 具有一些将 HTML 插入元素的方法,请参见此处。
如果您查看 Twitter Bootstrap Modal Dialog 的文档,您会看到它可以选择使用该remote:
选项通过 AJAX 远程加载数据。
这是一个粗略的示例,说明如何使用 Twitter 引导程序通过 AJAX 执行此操作
控制器
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 中传递它。