IEnumerable转换(?)需要模型到参数?

时间:2009-08-10 06:45:35

标签: c# asp.net-mvc

我有一个视图,我要列出一个复选框列表(帮助器),我不知道如何调用它,因为它总是说我的“类型”是错误的。

我正打算打电话:

public static string CheckBoxList(this HtmlHelper htmlhelper, IEnumerable<string> values, IEnumerable<string> labels, string name)
    {
        return CheckBoxList(htmlhelper, values, labels, name, ((IDictionary<string, object>) null));
    }

视图看起来像:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/AdminSite.Master" Inherits="System.Web.Mvc.ViewPage<BookingSystem.MVC.ViewModels.TestViewModel>" %>

    测试

<h2>Test</h2>

<table>  
<%= Html.CheckBoxList((IEnumerable<string>)Model.Usergroups, (IEnumerable<string>)Model.Usergroups, "asdf")  %>

<% foreach (var item in Model.Usergroups) { %>
    <tr>
        <td>
            <%= item.UsergroupName %>
        </td>
    </tr>
<% } %>
</table>

<p>
    <%= Html.ActionLink("Create New", "Create") %>
</p>

我怎样才能让它工作,我希望我的复选框列表助手可以在不同的视图中工作,所以我想我必须以某种方式转换参数?

/ M

1 个答案:

答案 0 :(得分:1)

将类型的名称放在括号中称为强制转换。它实际上并没有将对象“转换”为另一种类型。相反,它在编译时关闭类型检查。因此,如果它在编译时工作,那证明很少。

在你发布的示例代码中,没有充分的理由在任何地方使用强制转换。 (特别是,你永远不需要将null投射到任何东西上。)

您需要从模型的某个部分获得IEnumerable<string>吗?正确的方法取决于模型的结构。

在C#3.0中执行此操作的最简单方法是在某种类型的Select上调用IEnumerable扩展方法:

var strings = Model.Usergroups.Select(ug => ug.UsergroupName);

嘿presto。