2008-08-19 7 views
0

Je suis en train de mettre en œuvre quelque chose comme ceci:Créer votre propre table avec des boutons CommandArgument dans ASP.NET MVC

<div> 
    <table> 
     <thead> 
      <tr> 
       <td>Port name</td> 
       <td>Current port version</td> 
       <td>New port version</td> 
       <td>Update</td> 
      </tr> 
     </thead> 
     <% foreach (var ip in Ports) { %> 
      <tr> 
       <td> 
        <%= ip.PortName %> 
       </td> 
       <td> 
        <%= ip.CurrentVersion %> 
       </td> 
       <td> 
        <%= ip.NewVersion %> 
       </td> 
       <td> 
        <asp:Button ID="btnUpdate" runat="server" Text="Update" CommandArgument="<% ip.PortName %>" /> 
       </td> 
      </tr> 
      <% } %> 
    </table> 
</div> 

CommandArgument propriété de Le bouton est où mon code se plaint de ne pas être en mesure de résoudre le symbole ip. Y a-t-il un moyen de faire ce que j'essaie de faire?

Répondre

3

Vous ne souhaitez pas utiliser un bouton Webforms dans ASP.NET MVC. MVC est une manière complètement différente de travailler, et vous n'avez plus l'abstraction WebForms.

Vous avez 2 options différentes que vous pouvez remplacer votre bouton asp: avec une balise d'entrée ou utiliser un hyperlien standard à la place. Si vous utilisez l'option de saisie, vous devrez envelopper dans un élément de formulaire. L'action de formulaire doit pointer vers une action du contrôleur.

0

Je pense que vous devez inclure votre bloc dans Form tags et runat = server.

1

Vous ne pouvez pas utiliser les contrôles de formulaire Web dans ASP.NET MVC de manière triviale, car ils s'appuient sur des éléments qui sont supprimés dans MVC. Au lieu de cela vous ajoutez un bouton de deux façons, à la fois en utilisant le HtmlHelper sur le ViewPage:

Vous pouvez ajouter un bouton dans un formulaire, qui est facilement handeled dans un contrôleur si vous avez un formulaire pour chaque seul bouton:

<% using(Html.BeginForm("Update", "Ip", new {portName = ip.PortName})) { %> 

    .... 
    <input name="action" type="submit" value="Update"> 

<% } %> 

BeginForm() utilisera par défaut le même contrôleur et l'action à partir de laquelle la vue a été créée. L'autre façon est d'ajouter un lien à la place, ce qui correspond mieux à votre exemple d'itération à travers une liste. Par exemple permet de dire que vous avez IpController

<%= Html.ActionLink("Update IP", "Update", "Ip", 
     new { 
      portName = ip.PortName 
     }) 
%> 

Le lien sera à l'action de mise à jour en IpController avec le portName donné en tant que paramètre. Dans les deux cas, vous aurez besoin de cette action dans IpController:

public ActionResult Update(string portName) { 
    // ... 
} 

Espérons que cela vous aide.

0

FWIW,

Je pense que ce texte manque un signe égal:

CommandArgument = "<% ip.PortName%>"

devrait être

CommandArgument = » <% = ip.PortName%> "

Questions connexes