2009-08-10 5 views
0

J'ai une vue où je vais lister une liste de cases à cocher (aide), et je ne suis pas sûr comment appeler cela, car il dit toujours que mon "type" est faux.IEnumerable conversion (?) Pour le modèle à paramétrer nécessaire?

J'essaie d'appeler:

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)); 
    } 

Et vue ressemble à:

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

test

<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> 

Comment puis-je faire en sorte que cela fonctionne, je veux que mon assistant checkbox-list fonctionne à partir de différentes vues, donc je suppose que je dois convertir les paramètres d'une manière ou d'une autre?

/M

Répondre

1

Mettre le nom d'un type entre parenthèses est appelé un casting. Il ne convertit pas réellement un objet en un autre type. Au lieu de cela, il désactive la vérification de type lors de la compilation. Donc, si cela fonctionne au moment de la compilation, cela prouve très peu.

Dans l'exemple de code que vous avez posté, il n'y a aucune raison d'utiliser des conversions n'importe où. (En particulier, vous n'avez jamais besoin de lancer null pour quoi que ce soit.)

Vous avez besoin d'un IEnumerable<string> de la part de votre modèle? La bonne façon de le faire dépendra de la structure de votre modèle.

La meilleure façon de le faire en C# 3.0 est d'appeler la méthode d'extension Select sur un IEnumerable d'un certain type:

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

Hey presto.

+0

Bonjour, j'ai le même problème. Je dois passer un IEnumerable en paramètre. Et j'essaye d'obtenir des valeurs de ceci avec un foreach dans le contrôleur. Mais il semble vide ... Attendu que non. Pourquoi ? – Steffi

Questions connexes