我正在使用 Eric Hexter 等人的“Twitter Bootstrap for MVC”开发一个应用程序框架。
我在共享索引页面中的默认 html.actionlink 行为存在一个小问题,该页面使用 foreach 循环提供来自发送到视图的匿名模型的列表。
我正在尝试为“id”添加一个 html 属性,该属性将在删除一行数据时调用 javascript 模式。
如果我尝试添加属性,则 routevalues 变量将呈现为字符串。我已经尝试为 html 属性使用 IDictionary,但结果相似。
在 foreach 循环之外创建一个 actionlink 可以使 javascript 按预期工作。
代码(片段)最后一行是发生错误/混淆的地方:
@using BootstrapSupport
@model System.Collections.IEnumerable
<h4>@Model.GetLabel() <small>Listing</small></h4>
<table class="table table-striped">
<caption></caption>
<thead>
<tr>
@foreach (var property in Model.VisibleProperties())
{
<th>
@property.GetLabel()
</th>
}
<th></th>
</tr>
</thead>
@{ int index = 0; }
@foreach (var model in Model)
{
ViewData[index.ToString()] = model;
<tr>
@foreach (var property in model.VisibleProperties())
{
<td>
@Html.Display(index + "." + property.Name)
</td>
}
<td>
<div class="btn-group">
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
Action
<span class="caret"></span>
</a>
<ul class="dropdown-menu">
@{
@Html.TryPartial("_actions", model)
var routevalues = model.GetIdValue();
<li>@Html.ActionLink("Edit", "Edit", routevalues)</li>
<li>@Html.ActionLink("Details", "Details", routevalues)</li>
<li class="divider"></li>
<li>@Html.ActionLink("Delete", "Delete", routevalues, new { id = "mylink" })</li>
预期结果:
<li><a href="/Film/Delete/1" id="mylink">Delete</a></li>
实际结果:
<li><a href="/Film/Delete?Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D" id="mylink">Delete</a></li>
当我使用 IDictionary 尝试它时,我得到了一个稍微不同但相似的结果(假设 routevalues 返回一个 RouteValueDictionary)
---响应 Satpal 编辑---
<li><a Comparer="System.Collections.Generic.GenericEqualityComparer`1[System.String]" Count="1" Keys="System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.String]" Values="System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.String]" href="/Film/Delete?Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.Object%5D">Delete</a></li>
有没有什么方法可以在不重写 Eric Hexter 的 MVC Twitter Bootsrap mod 背后的代码块的情况下获得预期的结果?
根据 Satpal 的帮助,有效的代码行如下:
<li>@Html.ActionLink("Delete", "Edit", new RouteValueDictionary(routevalues), new Dictionary<string, object> { { "id", "mylink" } })</li>