如何将我的文本框字符串映射到我的 url 路线?

how do I map my text box string into my url route?

我有一个文本框,我可以在其中输入数据并通过 post 传递到我的 'home' 控制器以执行操作 'results'

我希望 url 在我 post 返回时看起来像这样

https://localhost:44301/Home/Results/San Francisco, CA, United States

我正在像这样传递文本框数据。

@using (Html.BeginForm("Results", "Home", FormMethod.Get, new { @class = "navbar-form navbar-left", role = "search" }))
                {
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="Search" id="navbarautocomplete" name="location">
                    <button type="submit" class="btn btn-default">Submit</button>
                </div>
                }

这是我的路线。

routes.MapRoute("SearchResults", 
            "home/results/{location}",
            new { controller = "Home", action = "Results", location = ""}
        );

如何设置我的路由或我的表单以查看已作为位置提交到我的 url 中的数据?

我可以让它看起来像这样。

https://localhost:44301/home/results?location=San+Francisco%2C+CA%2C+United+States

但我想在 /results/

之后去旧金山

正如@StephenMuecke 在评论中提到的那样,您可以 POST 将您的搜索值添加到一个(单独的)操作中,然后重定向到您的结果页面,将位置作为参数传递:

@using (Html.BeginForm("Search", "Home", FormMethod.Post, new { @class = "navbar-form navbar-left", role = "search" }))
{
    <div class="form-group">
        <input type="text" class="form-control" placeholder="Search" id="navbarautocomplete" name="location">
        <button type="submit" class="btn btn-default">Submit</button>
    </div>
}

然后在你的控制器中:

[HttpPost]
public ActionResult Search(string location)
{
    return RedirectToAction("Results", new { location = location });
}

public ActionResult Results(string location)
{
    return Content("location is: " + location);
}

您还需要在 RouteConfig 中设置以下路由以获得友好 URL(确保这是在默认路由之上,因为它们自上而下匹配)。

routes.MapRoute(
    name: "SearchResults",
    url: "Home/Results/{location}",
    defaults: new { controller = "Home", action = "Results" }
);