Фактически, когда searchTerms
может иметь значение null-or-emptyString, нет необходимости помещать его в mapRoute
.И когда вы попытаетесь создать ссылку с помощью Html.ActionLink
или Html.RouteLink
и передать ей параметр searchTerms
, он создаст searchTerms
в виде строки запроса без косых черт:
routes.MapRoute(
"SearchPosts",
"posts/search",
new { controller = "Posts", action = "Search"
/* , searchTerms = "" (this is not necessary really) */ }
);
и в Razor:
// for links:
// @Html.RouteLink(string linkText, string routeName, object routeValues);
@Html.RouteLink("Search", "SearchPosts", new { searchTerms = "your-search-term" });
// on click will go to:
// example.com/posts/search?searchTerms=your-search-term
// by a GET command
// or for forms:
// @Html.BeginRouteForm(string routeName, FormMethod method)
@using (Html.BeginRouteForm("SearchPosts", FormMethod.Get)) {
@Html.TextBox("searchTerms")
<input type="submit" value="Search" />
// on submit will go to:
// example.com/posts/search?searchTerms=*anything that may searchTerms-textbox contains*
// by a GET command
}
и в контроллере:
public class PostsController : Controller {
public ActionResult Search(string searchTerms){
if(!string.IsNullOrWhiteSpace(searchTerms)) {
// TODO
}
}
}