Pergunta

Eu preciso instanciar alguns LinkButtons ASP em uma página vista ASP.NET MVC. Eu tentei algumas coisas, e eu não posso levá-los a sair bem. Heres minha mais recente encarnação do código: o arquivo 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>

O que torna no Firefox é um exemplo do texto do link para cada membro na coleção Estou enumerando, mas eles não são hiperlinks, apenas texto. Os olhares HTML gerados como este

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

Eu tentei adicionar um attribuite "servidor" runat = a cada asp: tag LinkButton, mas recebo uma exceção de tempo de execução que os controles só pode ser colocado dentro de uma tag de formulário com o "server" atributo runat =. Que eu acho que eu já tenha feito, então eu realmente não entendo isso. Alguém pode me explicar o que estou fazendo de errado, eo que eu preciso fazer para corrigi-lo para que os LinkButtons são realmente linky?

Foi útil?

Solução

Com ASP.NET MVC você deve usar métodos Html.ActionLink(...) auxiliares (e afins). Eles fornecem funcionalidade muito mais rica do que LinkButtons.

Outras dicas

Meu palpite é que você quer usar LinkButton para enviar o formulário de usá-lo? Se for esse o caso, eu tenho feito algo semelhante e é algo como isto:

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

Em seguida, lidar com a enviar via jQuery:

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

Infelizmente, ASP.NET MVC não suporta controles de formulários da web agora. Desculpe! : (

Você terá que usar um link HTML padrão.

Eu escrevi um método de extensão um pouco bruto. Sinta-se livre para melhorar este (é tudo que eu precisava):

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 a vista, chamá-lo assim:

@Url.ActionButton("Button Text", "ActionMethod")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top