Ответ 1
С ASP.NET MVC вы должны использовать вспомогательные методы Html.ActionLink(...)
(и тому подобное). Они обеспечивают гораздо более богатые функциональные возможности, чем LinkButtons.
Мне нужно создать экземпляр ASP LinkButtons на странице просмотра 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 на самом деле были связаны?
С ASP.NET MVC вы должны использовать вспомогательные методы Html.ActionLink(...)
(и тому подобное). Они обеспечивают гораздо более богатые функциональные возможности, чем LinkButtons.
Я предполагаю, что вы хотите использовать 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();
});
});
К сожалению, ASP.NET MVC не поддерживает элементы управления веб-формами прямо сейчас. Сожалею!: (
Вам нужно будет использовать стандартную ссылку HTML.
Я написал несколько грубый метод расширения. Не стесняйтесь улучшать это (все, что мне нужно):
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")