MVC 5 - 路由问题
MVC 5 - Routing Issue
我在调用我的控制器方法时遇到问题,但没有将所需的参数值传递给它:有什么地方出错了吗? (目前 "query" 参数为空)。
控制器操作
public ActionResult Search(string query, int page = 1)
{
if (!string.IsNullOrWhiteSpace(query)) return SearchResults(query, page);
return View(new ApplicationSearchViewModel());
}
查看 HTML
@model BluBrik.Mobile.WebUI.Models.ApplicationSearchViewModel
@{
ViewBag.Title = "Find Application";
}
<h2>Search</h2>
@using (Html.BeginForm("SearchResults", "Application", new { query = Model.SearchString }))
{
<div>
@Html.EditorFor(m => m.SearchString)
<input type="submit" value="Search" />
</div>
}
Route.config
routes.MapRoute(
name: null,
url: "Application/Search/{query}",
defaults: new { controller = "Application", action = "Search", query = UrlParameter.Optional }
);
表单元素的 HTML 将在加载页面时创建,而不是在 post 返回时创建。因此,查询字符串中的 Model.SearchString 值不会反映 posted 形式中的值。
您需要使用 post 数据。您可能还想考虑两个控制器操作,用于 GET 和 POST。这会给你:
控制器
[HttpGet]
public ActionResult Search(string query, int page = 1)
{
if (!string.IsNullOrWhiteSpace(query)) return SearchResults(query, page);
return View(new ApplicationSearchViewModel());
}
[HttpPost]
public ActionResult Search(ApplicationSearchViewModel model)
{
if (!string.IsNullOrWhiteSpace(model.SearchString)) return SearchResults(model.SearchString , 1);
return View(new ApplicationSearchViewModel());
}
查看
@using (Html.BeginForm("Search", "Application", FormMethod.Post))
{
<div>
@Html.EditorFor(m => m.SearchString)
<input type="submit" value="Search" />
</div>
}
我在调用我的控制器方法时遇到问题,但没有将所需的参数值传递给它:有什么地方出错了吗? (目前 "query" 参数为空)。
控制器操作
public ActionResult Search(string query, int page = 1)
{
if (!string.IsNullOrWhiteSpace(query)) return SearchResults(query, page);
return View(new ApplicationSearchViewModel());
}
查看 HTML
@model BluBrik.Mobile.WebUI.Models.ApplicationSearchViewModel
@{
ViewBag.Title = "Find Application";
}
<h2>Search</h2>
@using (Html.BeginForm("SearchResults", "Application", new { query = Model.SearchString }))
{
<div>
@Html.EditorFor(m => m.SearchString)
<input type="submit" value="Search" />
</div>
}
Route.config
routes.MapRoute(
name: null,
url: "Application/Search/{query}",
defaults: new { controller = "Application", action = "Search", query = UrlParameter.Optional }
);
表单元素的 HTML 将在加载页面时创建,而不是在 post 返回时创建。因此,查询字符串中的 Model.SearchString 值不会反映 posted 形式中的值。
您需要使用 post 数据。您可能还想考虑两个控制器操作,用于 GET 和 POST。这会给你:
控制器
[HttpGet]
public ActionResult Search(string query, int page = 1)
{
if (!string.IsNullOrWhiteSpace(query)) return SearchResults(query, page);
return View(new ApplicationSearchViewModel());
}
[HttpPost]
public ActionResult Search(ApplicationSearchViewModel model)
{
if (!string.IsNullOrWhiteSpace(model.SearchString)) return SearchResults(model.SearchString , 1);
return View(new ApplicationSearchViewModel());
}
查看
@using (Html.BeginForm("Search", "Application", FormMethod.Post))
{
<div>
@Html.EditorFor(m => m.SearchString)
<input type="submit" value="Search" />
</div>
}