2016-01-03 1 views
0

Je suis en train d'obtenir des données de la vue dans la chaînechaîne envoi de la vue au contrôleur en asp.net

est ici le code Voir

<a href="/Admin/ViewCustomerDetails/@customer.name"> </a>

Et dans le contrôleur, Je reçois ce nom de client comme ceci:

public ActionResult ViewCustomerDetails(string c_name) { 
 

 
      List<Sale> customerList = new List<Sale>(); 
 
      customerList = db.Sales.Where(x => x.sale_customer == c_name).ToList(); 
 

 
      double total_cash_recieved = 0; 
 
      double total_amount = 0; 
 
      foreach (var customer in customerList) { 
 
       total_cash_recieved = total_cash_recieved + (double)customer.cash_recieved; 
 
       total_amount = total_amount = (double)customer.sale_amount; 
 
      } 
 
      double remaining_balance = total_amount - total_cash_recieved; 
 
      ViewBag.TotalAmount = total_amount; 
 
      ViewBag.TotalRecieved = total_cash_recieved; 
 
      ViewBag.TotalRemaining = remaining_balance; 
 
      return View(customerList); 
 
     }

Mais le problème est, dans la variable nom_c, j'obtiens null. Quelqu'un sait comment le corriger ou résoudre?

Répondre

0

Vous devez l'envoyer comme ceci:

<a href="/Admin/[email protected]"> </a> 

Et assurez-vous que @customer.name est non nul avant d'aller du côté du serveur.

2

Puisque votre nom de paramètre est c_name, vous devez l'inclure dans votre chaîne de requête comme Burak mentionné dans sa réponse.

Si vous préférez, vous pouvez rendre le lien en utilisant la méthode auxiliaire Html.ActionLink.

Html.ActionLink("View","ViewCustomerDetails","Admin",new { c_name=customer.name},null) 

Ou si vous préférez garder l'URL existante que vous avez, vous pouvez mettre à jour votre nom de paramètre de la méthode ViewCustomerDetails-Id de telle sorte que la définition de route par défaut, la valeur de votre paramètre sans nom sera mis en correspondance avec le paramètre Id.

public ActionResult ViewCustomerDetails(string id) { 
    var c_name=id; 
    // your existing code 
} 

Il est toujours une bonne idée de passer un identifiant unique (ID client etc ..) au lieu de passer un nom pour afficher les détails parce que je connais plus d'un scott dans le monde.

+0

Peut-être que customer.name est conçu pour être unique, comme un nom d'utilisateur ou autre chose? Sinon, vous avez certainement raison. –

0

ou vous pouvez définir une nouvelle route vers RouteConfig.cs

routes.MapRoute(
      name: "Default2", 
      url: "Admin/ViewCustomerDetails/{c_name}", 
      defaults: new { controller = "Admin", action = "ViewCustomerDetails", c_name= UrlParameter.Optional } 
     ); 
0

Vous n'avez pas passé le paramètre au contrôleur.

Vous pouvez toujours simplement transmettre des paramètres dans le cadre d'une chaîne de requête tant que la méthode d'action sur le contrôleur les attend exactement par le même nom dans la signature.