2009-08-10 87 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