LinkButton in ASP.NET MVC
-
22-08-2019 - |
Domanda
Ho bisogno di creare un'istanza di alcuni LinkButtons ASP in una pagina vista ASP.NET MVC. Ho provato un paio di cose, e non posso ottenere loro di venire fuori proprio. Heres il mio più recente incarnazione del Codice: il file aspx
<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>
Ciò che rende in Firefox è un esempio del testo di collegamento per ogni membro della collezione che sto elencando, ma arent collegamenti ipertestuali, solo testo. Il codice HTML generato assomiglia a questo
<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>
Ho provato ad aggiungere un runat = attribuite "server" per ogni asp: LinkButton tag, ma ottengo un'eccezione di runtime che i controlli possono essere messi solo all'interno di un tag form con l'attributo runat = "server". Che credo ho già fatto, così io non capisco questo. Qualcuno può spiegare a me quello che sto facendo male, e che cosa devo fare per risolvere il problema in modo che le LinkButtons sono in realtà Linky?
Soluzione
Con ASP.NET MVC si dovrebbe usare metodi Html.ActionLink(...)
helper (e simili). Essi forniscono funzionalità molto più ricca di LinkButtons.
Altri suggerimenti
La mia ipotesi è che si desidera utilizzare LinkButton per inviare il modulo di usarlo? Se questo è il caso, ho fatto qualcosa di simile ed è qualcosa di simile:
<% 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>
<% } %>
Poi gestire il presentare tramite jQuery:
$(document).ready(function(){
$("a.do-something-link").click(function(ev) {
ev.preventDefault();
$("#MyForm").submit();
});
});
Purtroppo, ASP.NET MVC non supporta moduli web controlli al momento. Scusate! : (
Si dovrà utilizzare un collegamento HTML standard.
Ho scritto un metodo di estensione un po 'grezzo. Sentitevi liberi di migliorare su questo (è tutto quello che dovevo):
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);
}
E nella vista, chiamare in questo modo:
@Url.ActionButton("Button Text", "ActionMethod")