我有一个在地图上显示位置的应用程序。我已创建了一条路线,以便我可以拥有不错的黑客网址,例如http://www.mydomain.com/paris。只需输入URL就行了,但我在主页上有一个发送GET请求的搜索表单。提交表单后,位置栏中显示的URL的格式为http://www.mydomain.com/Dashboard?location=paris。通常这不会太重要,因为它正在执行正确的操作,但我有一个运行show的backbone.js应用程序,它特别关注URL结构。
如果没有javascript或重定向,可能无法做到我需要的东西,因为填写表格ACTION属性时位置是未知的 - 但任何人都可以确认吗?
这是我的路线。
public static void RegisterRoutes( RouteCollection routes )
{
routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
routes.MapRoute(
String.Empty,
"{location}",
new {
controller = "Dashboard",
action = "Index",
id = ""
}
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
} // Parameter defaults
);
}
这是控制器。
public class DashboardController : Controller
{
[HttpGet]
public ViewResult Index(string location)
{
return View(new AccItemSearch { Location = location });
}
}
这是表格。
@using (Html.BeginForm("Index", "Dashboard", FormMethod.Get)) {
<h2>Where are you going?</h2>
<input type="text" placeholder="Area, town or postcode" id="location" name="location"/>
<button>Search!</button>
</div>
}
澄清:我想要帮助的问题是如何让用户提交表单然后降落到网址为http://www.mydomain.com/searchterm的网页上,从而匹配路线,而不是在包含网址http://www.mydomain.com/Dashboard
的网页上答案 0 :(得分:0)
该表单应该是POST以提交表单数据。
搜索应该是提交按钮
<input type="submit" name="Search" value="Search" />
否则它看起来不错,除非你有一个冲突的路线。孤立地测试你的路线,看起来很好。只是该位置没有被发送。
答案 1 :(得分:0)
在HTML生成(即服务器端)期间,您将无法更改表单的action
属性,因为您根本不知道它应该指向什么。因此,如果您需要URL最终成为确切的搜索词,最简单的选择可能是在提交表单之前使用JavaScript将action
属性更改为它,并且有一个控制器可以捕获遵循www的所有URL .domain.com / searchterm模式。
您无法真正重定向到特定操作,因为这会成为返回到浏览器的网址,我怀疑您希望每个搜索字词都有一个操作。
<强> HTML:强>
<form method="post" id="myform">
<input type="text" id="searchterm" />
<input type="submit" value="Search" />
</form>
<强> jQuery的:强>
$(function () {
$("#myform").submit(function () {
var searchVal = $("#searchterm").val();
$(this).attr("action", searchVal);
});
});
<强>路线:强>
routes.MapRoute(
"",
"{searchterm}",
new { controller = "Home", action = "Search" }
);
请注意,必须先将放在默认路由之前。
<强>动作:强>
public ActionResult Search(string searchterm)
{
//do stuff
}
现在,如果访问者输入“阿拉斯加”一词并提交搜索表单,他们最终将访问domain.com/Alaska。