2009-08-10 89 views
0

我有一个视图,我要列出一个复选框列表(助手),我不知道如何调用它,因为它总是说我的“类型”是错误的。IEnumerable转换(?)模型参数需要?

我试图拨打:

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

把括号中的类型的名称被称为流延。它实际上不会将对象“转换”为另一种类型。相反,它会在编译时关闭类型检查。所以如果它在编译时起作用,那证明很少。

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

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

做,在C#3.0的最简单方法是调用Select扩展方法上的一些类型的IEnumerable

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

变戏法似的。

+0

嗨,我有同样的问题。我需要传递一个IEnumerable参数。我试图用控制器中的foreach来获得这个值。但它似乎是空的...而不是。为什么? – Steffi 2011-04-15 21:37:25