2016-12-19 5 views
0

У меня есть форма, которая отправляет 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?}"); 
     }); 
+0

Где ваш 'IActionResult' это в главном контроллере? – Izzy

+0

Отправьте свои маршруты. Возможно, было бы полезно увидеть определение «SubmitUserSearch». –

+0

Да, действие находится в контроллере Home. Добавленные маршруты добавят определение SubmitUserSearch. – Passage

ответ

1

В вашем методе SubmitUserSearch() POST значение m.ID является string ("Боб"), так что вы RedirectToAction() переводится

return RedirectToAction("EventListByArtist", "Bob"); 

, который использует this overload, где второй параметр является именем контроллера, следовательно, он Generat es /Bob/EventListByArtist.

Вы должны использовать this overload, где второй параметр object

return RedirectToAction("EventListByArtist", new { id = m.ID }); 
Смежные вопросы