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?

È stato utile?

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")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top