2013-04-04 1 views
1

J'essaye d'utiliser un lien d'action ASP MVC3 pour naviguer vers une autre vue (même contrôleur). La vue est attachée à un modèle qui utilise une clé composée pour sa clé primaire. Voici le lien d'action comme il est écrit sur la vueASP MVC3 ActionLink ne rend pas les variables

@Html.ActionLink("Edit Agent", "AgentEdit", "BankListMasterController", 
               new { @agentId = int.Parse(item.AgentId), @id = item.ID}) 

Cependant, lorsque cela est rendu, il rend comme suit

http://localhost:2574/BankListMaster/AgentEdit?Length=24 

qui jette évidemment une erreur:

The parameters dictionary contains a null entry for parameter 'agentId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ViewResult AgentEdit(Int32, Int32)' in 'Monet.Controllers.BankListMasterController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. 
Parameter name: parameters 

Voici la méthode de contrôleur pour faire bonne mesure:

public ViewResult AgentEdit(int agentId, int id) 
    { 
     string compare = agentId.ToString(); 

     BankListAgentId agent = (from c in db.BankListAgentId 
           where c.ID == id && 
             c.AgentId.Equals(compare) 
           select c).Single(); 

     return View("AgentEdit", agent); 
    } 

Répondre

3
@Html.ActionLink("Edit Agent", "AgentEdit", "BankListMasterController", 
               new { agentId = int.Parse(item.AgentId), id = item.ID}, null) 

Cela devrait faire l'affaire

et la raison est la suivante: selon http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink(v=vs.108).aspx

Vous ne trouverez pas là méthode avec (HtmlHelper, string, string, string, object) il y a cependant (HtmlHelper, chaîne , string, string, object, object) où le second dernier objet est des valeurs de route et le dernier sont des attributs html.

0

Selon les paramètres que vous avez fournis, le mauvais lien ActionLink est appelé.

Le problème est qu'il « tente de sérialiser un objet chaîne »

Voici la réponse canonique au « paramètre « Longueur » en lien » question: Why does Html.ActionLink render "?Length=4"