2009-04-06 16 views
4

Je suis nouveau sur asp.net MVC. J'ai pu créer ma vue et afficher les données (Gridview). En outre, j'ai été en mesure de créer un lien hypertexte (en utilisant Url.Action) en passant les types string et int. Cependant, je souhaite créer un lien hypertexte référençant un type plus complexe. La classe associée à ma vue a une référence à une liste. Ce que je veux est de créer un ActionResult supplémentaire dans mon contrôleur qui obtient comme une liste de paramètres (voir ci-dessous)ASP.NET MVC. Aucune idée de comment utiliser Url.action pour passer un objet au contrôleur

public ActionResult ViewItems(List<Items> c) 
{    
    return View(c); 
} 

Mon idée est quand est d'être en mesure de transmettre cette liste au contrôleur et le contrôleur appellera la vue correspondante. J'ai essayé (voir ci-dessous), mais je me vide.

<asp:HyperLink ID="LinkContractID" runat="server" NavigateUrl='<%#Url.Action("ViewItems", new {c = **((Contract)Container.DataItem).ContractItems.ToList<Items>(**)}) %>' 
Text='<%# Eval("ContractId") %>'></asp:HyperLink> 
+0

Je ne sais pas ce qui est arrivé, mais il ne montre pas: NavigateUrl = '<% # Url.Action ("Vie wItems ", nouveau {c = ((Contract) Container.DataItem) .ContractItems.ToList ()})%> ' –

+0

GridView ...? N'est-ce pas un contrôle WebForms? Vous ne devriez pas utiliser cela avec MVC. – Charlino

+0

Charlino a raison. Ce truc Eval() ne fonctionne pas avec MVC non plus. –

Répondre

1

Si vous êtes à la recherche d'une grille, this tutorial montre comment créer une grille avec MVC. Avec MVC, vous ne devriez pas utiliser les commandes Gridview et asp::

0

Si vous voulez générer un lien, utilisez simplement <% = Html.ActionLink (...)%> avec les paramètres nécessaires.

3

Comme dans la réponse précédente, vous n'utilisez pas de commandes ASP. Il y a des avantages et des inconvénients avec Html.ActionLink cependant, ce n'est pas très bon si vous voulez mettre un lien autour d'une image par exemple. Dans ce cas, la syntaxe serait

<a href="<%= Url.Action(
    "ShowListPage", "MyController", new { modelId = 101 }) %>"> 
    <img src="img.gif" /> 
</a> 

également avec votre action dans le contrôleur, vous serait idéalement à la recherche d'avoir cette aller chercher le modèle pour passer à une vue fortement typé à ce modèle. Vous avez donc un objet modèle avec un constructeur en prenant une carte d'identité, par exemple

public MyModel(int modelId) 
{ 
    this.TheListThatHoldsTheGridData = MyDataLayerProc(modelId); 
} 

De cette façon, vous pouvez avoir votre action dans le contrôleur de MyController, retournez la ShowListPage vue (associé à une instance de MyModel) comme si

public ActionResult ShowListPage(int modelId) 
{ 
    return View(new MyModel(modelId)); 
} 

Hope this helps,

Mark

Questions connexes