2009-05-18 8 views
10

J'ai besoin d'instancier des LinkButtons ASP sur une page de vue ASP.NET MVC. J'ai essayé quelques trucs, et je ne peux pas les faire sortir correctement. Heres mon incarnation la plus récente du code: le fichier ASPXLinkButton dans ASP.NET MVC

<body> 
<% using (Html.BeginForm("TitleDetail", "Movies", FormMethod.Post, new{runat="server"})) { %> 

    <ul> 
    <% foreach (var disc in Model.Title.tblDiscs) %> 
    <% { %> 

     <li> 
      <asp:LinkButton ID="Play">Link</asp:LinkButton> 
     </li> 
    <% } %> 
    </ul> 
<% } %> 
</body> 

Ce qu'il rend dans Firefox est une instance du lien texte pour chaque membre de la collection Je suis ENUMERE mais ils ne coûtent pas des liens hypertexte, juste le texte . Le code HTML généré ressemble à ce

<form action="/MyMovies/TitleDetail/239" method="post" runat="server">test title <br /> 

    <ul> 
     <li> 

      <asp:LinkButton ID="Play">Link</asp:LinkButton> 
     </li> 

     <li> 
      <asp:LinkButton ID="Play">Link</asp:LinkButton> 
     </li> 

     <li> 
      <asp:LinkButton ID="Play">Link</asp:LinkButton> 

     </li> 

    </ul> 

J'ai essayé d'ajouter un runat = attribuite « serveur » à chaque asp: tag LinkButton, mais je reçois une exception d'exécution qui contrôle ne peut être mis à l'intérieur une balise de formulaire avec l'attribut runat = "server". Ce que je pense avoir déjà fait, donc je ne comprends pas vraiment ça. Quelqu'un peut-il m'expliquer ce que je fais de mal, et ce que je dois faire pour le réparer afin que les LinkButtons soient réellement liés?

Répondre

7

Avec ASP.NET MVC, vous devez utiliser Html.ActionLink(...) méthodes d'aide (et autres). Ils fournissent des fonctionnalités beaucoup plus riche que linkbuttons.

2

Malheureusement, ASP.NET MVC ne prend pas en charge les contrôles de formulaires Web pour le moment. Pardon! :(

Vous devez utiliser un lien HTML standard.

+12

Je pense que c'est une bonne chose (tm). :) – BobbyShaftoe

+1

@BobbyShaftoe, une bonne chose sur quelle base? Normalement tout ce qui change l'état du serveur devrait utiliser un verbe POST, GET ne devrait être utilisé que pour extraire des données (ce sont les recommandations du W3C et elles sont destinées à la sécurité). Pour des raisons esthétiques, il n'est pas toujours possible d'utiliser un bouton, d'où le besoin de LinkButton. –

15

Je suppose que vous voulez utiliser LinkButton pour soumettre le formulaire en utilisant si tel est le cas, je l'ai fait quelque chose de semblable et il est quelque chose comme ceci:

<% using (Html.BeginForm("TitleDetail", "Movies", 
    FormMethod.Post, new{ id = "MyForm", name = "MyForm" })) { %>  
<ul> 
    <% foreach (var disc in Model.Title.tblDiscs) { %> 
     <li> 
      <a class="do-something-link" href="javascript:void(0);">Click</a> 
     </li> 
    <% } %> 
</ul> 
<% } %> 

poignée Puis le soumettre via jQuery:

$(document).ready(function(){ 
    $("a.do-something-link").click(function(ev) { 
     ev.preventDefault(); 
     $("#MyForm").submit(); 
    }); 
}); 
2

J'ai écrit une méthode d'extension quelque peu brute. Ne hésitez pas à améliorer ce (il est tout ce que je avais besoin):

public static IHtmlString ActionButton(this UrlHelper urlHelper, string buttonText, 
    string actionName) 
{ 
    var html = string.Format("<input type=\"button\" value=\"{0}\" " + 
     "onclick=\"window.location = '{1}'\"/>", 
     buttonText, urlHelper.Action(actionName)); 

    return new HtmlString(html); 
} 

Et dans la vue, l'appeler comme ceci:

@Url.ActionButton("Button Text", "ActionMethod")