0

我正在使用 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&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&amp;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&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.Object%5D&amp;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>
4

1 回答 1

1

尝试使用初始化语法将 HTML 属性传递为Dictionary

@Html.ActionLink("Delete", "Delete",  routevalues, 
  new  Dictionary<string, object>{
  { "id", "mylink" }
  }
 )

根据LinkExtensions.ActionLink没有过载

ActionLink(HtmlHelper, String, String, RouteValueDictionary, Object)

因此你必须使用过载

ActionLink(HtmlHelper, String, String, RouteValueDictionary, IDictionary<String, Object>)
于 2013-08-19T15:13:18.457 回答