LinkButton in ASP.NET MVC

user90784 picture user90784 · May 19, 2009 · Viewed 14.7k times · Source

I need to instantiate some ASP LinkButtons onto an ASP.NET MVC view page. I've tried a few things, and I cant get them to come out right. Heres my most recent incarnation of the code: the aspx file

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

What it renders in Firefox is one instance of the text Link for each member in the collection I'm enumerating, but they arent hyperlinks, just text. The generated HTML looks like this

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

I've tried adding a runat="server" attribuite to each asp:LinkButton tag, but I get a runtime exception that controls can only be put inside a form tag with the runat="server" attribute. Which I think I've already done, so I dont really understand that. Can anyone explain to me what I'm doing wrong, and what I need to do to fix it so that the LinkButtons are actually linky?

Answer

Johannes Setiabudi picture Johannes Setiabudi · May 19, 2009

My guess is that you want to use LinkButton to submit the form using it? If that is the case, I have done something similar and it's something like this:

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

Then handle the submit via jQuery:

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