1

我有一个在地图上显示位置的应用程序。我创建了一条路线,这样我就可以拥有不错的可破解 URL,例如http://www.mydomain.com/paris。只需输入 URL 即可正常工作,但我在主页上有一个搜索表单,用于发送 GET 请求。提交表单时,地址栏中显示的 URL 格式为http://www.mydomain.com/Dashboard?location=paris。通常这不会太重要,因为它会触发正确的操作,但是我有一个运行该节目的主干.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>
        }

澄清一下:我需要帮助的问题是如何让用户提交表单,然后登陆 URL 为http://www.mydomain.com/searchterm的页面,从而匹配路由,而不是在使用 URL http://www.mydomain.com/Dashboard

4

2 回答 2

0

该表单应该是提交表单数据的 POST。

搜索应该是一个提交按钮

 <input type="submit" name="Search" value="Search" />

否则它看起来不错,除非你有一条冲突的路线。单独测试了您的路线,看起来还不错。只是没有发送位置。

于 2012-11-05T14:38:30.130 回答
0

您将无法action在 HTML 生成期间(即服务器端)更改表单的属性,因为您根本不知道它应该指向什么。因此,如果您需要 URL 最终成为确切的搜索词,最简单的选择可能是action在提交表单之前使用 JavaScript 将属性更改为它,并拥有一个控制器来捕获 www.domain.com/ 之后的所有 url搜索词模式。

您不能真正重定向到特定操作,因为那将成为返回给浏览器的 URL,我怀疑您是否希望每个搜索词执行一个操作。

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。

于 2012-11-05T14:57:22.697 回答