Кнопка ссылки в ASP.NET MVC
-
22-08-2019 - |
Вопрос
Мне нужно создать экземпляр некоторых кнопок ссылок 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 действительно были linky?
Решение
С помощью ASP.NET MVC вы должны использовать Html.ActionLink(...)
вспомогательные методы (и тому подобное).Они обеспечивают гораздо более богатую функциональность, чем кнопки ссылок.
Другие советы
Я предполагаю, что вы хотите использовать 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 прямо сейчас не поддерживает элементы управления web forms.Извините!:(
Вам придется использовать стандартную 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")