У меня есть форма, которая отправляет SearchByUserViewModel (содержащий только string ID
) в asp-controller="Home" asp-action="SubmitUserSearch"
. Форма представляет собой одно текстовое поле и кнопку отправки. SubmitUserSearch
извлекает идентификатор из модели и возвращает RedirectToAction("EventListByArtist", m.ID)
.MVC - Приведение к неправильному контроллеру
EventListByArtist, в главном контроллере, заключается в следующем:
public IActionResult EventListByArtist(string ID)
{
var events = context.Events.ToList();
ViewBag.genres = context.Genres.ToList();
ViewBag.artists = context.Artists.ToList();
ViewBag.ID = ID;
return View("EventList", events);
}
SubmitUserSearch перенаправляет EventListByArtist:
public IActionResult SubmitUserSearch(SearchByUserViewModel m)
{
return RedirectToAction("EventListByArtist", m.ID);
}
SearchByUserViewModel содержит только поле идентификатора.
Однако, что-то посередине разрывается, а вместо того, чтобы быть направленным (например, вход «Боб») Home/EventListByArtist/Bob
, я направляюсь в Bob/EventListByArtist
, которого не существует. Что вызывает перенаправление? Форма была вставлена ниже.
<form asp-controller="Home" asp-action="SubmitUserSearch" asp-route-returnurl="@ViewData["ReturnUrl"]" class="form-horizontal">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="ID" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="ID" class="form-control" id="artistInput" />
<span asp-validation-for="ID" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Search" />
</div>
</div>
</form>
Проект маршруты декларации (в Startup.cs) выглядит следующим образом:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Где ваш 'IActionResult' это в главном контроллере? – Izzy
Отправьте свои маршруты. Возможно, было бы полезно увидеть определение «SubmitUserSearch». –
Да, действие находится в контроллере Home. Добавленные маршруты добавят определение SubmitUserSearch. – Passage