我有一个表单,它将SearchByUserViewModel(仅包含string ID
)提交给asp-controller="Home" asp-action="SubmitUserSearch"
。表单是单个文本框和提交按钮。 SubmitUserSearch
从模型中检索ID并返回RedirectToAction("EventListByArtist", m.ID)
。
Home控制器中的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仅包含ID字段。
然而,中间的某些东西中断了,而不是被引导到(例如输入" Bob")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 :(得分:1)
在SubmitUserSearch()
POST方法中,m.ID
的值为string
(&#34; Bob&#34;),因此您RedirectToAction()
会转换为
return RedirectToAction("EventListByArtist", "Bob");
使用this overload,其中第二个参数是控制器的名称,因此它生成/Bob/EventListByArtist
。
您需要使用this overload,其中第二个参数为object
return RedirectToAction("EventListByArtist", new { id = m.ID });