LinkButton в ASP.NET MVC

Мне нужно создать экземпляр некоторых кнопок LinkButton ASP на странице просмотра ASP.NET MVC. Я пробовал несколько вещей, но не могу заставить их выйти правильно. Вот мое последнее воплощение кода: файл 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>

То, что он отображает в Firefox, - это один экземпляр текстовой ссылки для каждого члена коллекции, которую я перечисляю, но это не гиперссылки, а просто текст. Сгенерированный HTML выглядит так

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

Я пробовал добавить атрибут runat = "server" к каждому тегу asp: LinkButton, но я получаю исключение времени выполнения, в котором элементы управления могут быть помещены только в тег формы с атрибутом runat = "server". Что, я думаю, я уже сделал, поэтому я этого не совсем понимаю. Может ли кто-нибудь объяснить мне, что я делаю не так, и что мне нужно сделать, чтобы исправить это, чтобы LinkButtons действительно были связаны?


person Community    schedule 18.05.2009    source источник


Ответы (4)


В ASP.NET MVC вы должны использовать Html.ActionLink(...) вспомогательные методы (и т.п.). Они предоставляют гораздо более богатую функциональность, чем LinkButtons.

person DreamSonic    schedule 18.05.2009

Я предполагаю, что вы хотите использовать LinkButton для отправки формы с его помощью? Если это так, я сделал что-то подобное, и это примерно так:

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

Затем обработайте отправку через jQuery:

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

К сожалению, в настоящее время ASP.NET MVC не поддерживает элементы управления веб-формами. Прости! :(

Вам нужно будет использовать стандартную HTML-ссылку.

person JoshJordan    schedule 18.05.2009
comment
Я думаю, что это действительно хорошая вещь (тм). :) - person BobbyShaftoe; 19.05.2009
comment
@BobbyShaftoe, хорошая вещь на каком основании? Обычно все, что изменяет состояние сервера, должно использовать команду POST, GET следует использовать только для получения данных (это рекомендации W3C, и они предназначены для обеспечения безопасности). По косметическим причинам не всегда можно использовать кнопку, отсюда и необходимость в LinkButton. - person Waleed Eissa; 23.09.2009

Я написал несколько грубый метод расширения. Не стесняйтесь улучшать это (это все, что мне нужно):

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

И в представлении назовите это так:

@Url.ActionButton("Button Text", "ActionMethod")
person James R.    schedule 14.06.2013