如何在ASP.NET中输出HTML表而不是选择框(使用ListBoxFor生成)?

时间:2012-02-19 07:02:06

标签: asp.net asp.net-mvc asp.net-mvc-3

我通常是ASP.NET的新手,并且正在修改我继承的一些代码。有一段代码根据用户输入的搜索字词使用ListBoxFor创建一个选择框:

@Html.ListBoxFor(m => m.SelectedItem, 
                 Lookup.Models.myService.Search(Model.SearchTerm, 
                                         null == Model.SelectedCity ? 1 :  
                                         Int32.Parse(Model.SelectedCity))

Search()的签名是:

public static List<SelectListItem> Search(string term, string city)

我想要输出HTML表而不是显示选择框,而不是显示选择框。我甚至不确定如何做到这一点或者真正提供给大家的信息以帮助我:)

1 个答案:

答案 0 :(得分:3)

ListBoxFor帮助器显示<select>元素,multiple="multiple"属性允许多个选择。如果你想要别的东西,你不应该使用这个帮手。所以你说你想要一个HTML表格。

现在,您所显示的代码出现了一些问题。您正在视图中调用Lookup.Models.myService.Search。视图不应该从某些地方提取数据。它们应该只显示通过控制器动作以视图模型的形式传递给它们的数据。所以这个调用不应该在视图中完成。它应该事先完成,结果存储在视图模型的属性中:

public IEnumerable<SelectListItem> Items { get; set; }

反正。第一种可能性是自己编写标记:

<table>
    <thead>
        <tr>
            <th>Value</th>
            <th>Text</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Items)
        {
            <tr>
                <td>@item.Value</td>
                <td>@item.Text</td>
            </tr>
        }
    </tbody>
</table>

当然,一遍又一遍地编写这段代码可能会变得很麻烦。所以你可以在DisplayTemplate中外化它。例如,您可以将其放在~/Views/Shared/DisplayTemplates/MyTableTemplate.cshtml内,然后当您需要在视图中渲染它时可以使用:

@Html.DisplayFor(x => x.Items, "MyTableTemplate")