Pregunta

Necesito crear una instancia de algunos LinkButtons ASP en una página vista ASP.NET MVC. He intentado un par de cosas, y no puedo conseguir que salgan bien. Aquí está mi más reciente encarnación del código: el archivo 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>

Lo que hace que en Firefox es un ejemplo del texto de enlace para cada miembro de la colección que estoy enumerando, pero que pueden no estar hipervínculos, texto solo. El HTML generado es el siguiente

<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>

He intentado añadir un runat = attribuite "servidor" a cada asp: Etiqueta LinkButton, pero me da una excepción de tiempo de ejecución que controla sólo se puede poner dentro de una etiqueta de formulario con el atributo runat = "servidor". Que creo que ya he hecho, así que realmente no entiendo. ¿Puede alguien explicarme por qué estoy haciendo mal, y lo que tengo que hacer para solucionarlo de manera que los LinkButtons son en realidad Linky?

¿Fue útil?

Solución

Con ASP.NET MVC debe usar métodos Html.ActionLink(...) helper (y similares). Ellos proporcionan una funcionalidad mucho más rica que LinkButtons.

Otros consejos

Mi conjetura es que desea utilizar LinkButton para enviar el formulario de usarlo? Si ese es el caso, he hecho algo similar y es algo como esto:

<% 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>
<% } %>

A continuación, manejar el presentar a través de jQuery:

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

Por desgracia, ASP.NET MVC no es compatible con formularios web controla en este momento. ¡Lo siento! : (

Vas a tener que utilizar un enlace HTML estándar.

escribí un método de extensión algo tosco. Siéntase libre para mejorar esto (es todo lo que necesitaba):

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);
}

Y en la vista, lo llaman así:

@Url.ActionButton("Button Text", "ActionMethod")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top