Моя цель - добиться следующего:
- На странице ASP.NET пользователь выбирает сервер из списка
Server
объектов. - Пользовательнажимает кнопку для экспорта информации об этом сервере.
- При нажатии кнопки запускается метод C #
ExportServerInfo()
с переданным ему текущим Server
объектом (Model.Servers[i]
).
Контроллер имеет метод:
public void ExportServerInfo(Server id)
{
// Do something with the Server
System.Diagnostics.Debug.WriteLine(id.Name);
System.Diagnostics.Debug.WriteLine(id.RamCapacity);
}
Представление представляет собой файл CSHTML с использованием Razor.Вот код для кнопки:
<div class="col-md-12" align="right">
<a href="@Url.Action("ExportServerInfo", "ServerList", new { id = Model.Servers[i] })" class="btn btn-primary">
<span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span>
@MainResource.SomeLocalizationString
</a>
</div>
Сгенерированный HTML-код: <a href="/ServerList/ExportServerInfo/ProjectName.ViewModels.Server" class=...>
При нажатии кнопки метод ExportServerInfo()
в классе ServerListController должен вызываться с выбраннымServer
как единственный аргумент.Вместо этого пользователь переводится на localhost:56789/ServerList/ExportServerInfo/ProjectName.ViewModels.Server
с ошибкой HTTP 404 с веб-сервера, потому что он не может его найти;эта строка сама по себе не указывает, какой это сервер.Метод не вызывается вообще.Аналогичное решение, которое я попытался, привело пользователя на пустую страницу с указанным выше в качестве строки запроса в URL.
Когда пользователь нажимает кнопку, должен вызываться метод, но вместо этого пользователь перемещаетсяна страницу (которая 404) и метод не вызывается.
Метод выполняется, если действие не имеет аргумента / параметра:
<div class="col-md-12" align="right">
<a href="@Url.Action("ExportServerInfo", "ServerList")" class="btn btn-primary">
<span class="glyphicon glyphicon-download-alt" aria-hidden="true"></span>
@MainResource.SomeLocalizationString
</a>
</div>
Генерируемый HTML: <a href="/ServerList/ExportServerInfo" class=...>
Пользователь нажимает кнопку («посещение» /ServerList/ExportServerInfo
), но остается на странице, и метод запускается (без параметров).Но у метода должен быть параметр для передачи Server
обратно в контроллер.
Кроме того, по какой-то причине внешний вид кнопки при работе работает хорошо, но цвета подсветкинемного ошибочно в реализации.
tl; dr: Аргумент не передается методу, метод никогда не запускается, пользователь перенаправляется на страницу 404.Методу нужно передать Server
.