Asp.net mvc 如何将文本框字符串映射到url路由?

Asp.net mvc 如何将文本框字符串映射到url路由?,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我有一个文本框,我可以在其中输入数据,并在操作“结果”时向我的“主”控制器发送帖子 我希望在我发回邮件时,url最终看起来像这样 https://localhost:44301/Home/Results/San Francisco, CA, United States 我像这样传递文本框数据 @using (Html.BeginForm("Results", "Home", FormMethod.Get, new { @class = "navbar-form navbar-left", ro

我有一个文本框,我可以在其中输入数据,并在操作“结果”时向我的“主”控制器发送帖子

我希望在我发回邮件时,url最终看起来像这样

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>
                }
https://localhost:44301/home/results?location=San+Francisco%2C+CA%2C+United+States
如何设置我的路由或表单以查看作为url中的位置提交的数据

我可以让它看起来像这样

@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>
                }
https://localhost:44301/home/results?location=San+Francisco%2C+CA%2C+United+States

但我希望旧金山以后/结果/< /P > < P> @ StuffMueCek在评论中提到,你可以把你的搜索值张贴到一个(单独的)动作,然后重定向到你的结果页面,把位置作为参数:

@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>
}
您还需要在RouteConfig中设置以下路由以获取友好URL(确保这高于默认路由,因为它们自上而下匹配)


当您发布表单时,它不会修改url(需要是GET)。文本框的值将在
请求中。表单
值我可以让它在GET调用中显示用户输入,如home/Results?location=San。。。,但是我如何在home/index/userinput这样的“/”之后获得位置呢?您可以对一个方法进行POST,然后执行
重定向到操作(“Results”,new{location=yourParameter})
但是您需要让POST方法具有不同的参数(例如,接受一个名为
location
的属性的模型)-但是请注意,空白将呈现为
San%20Francisco
这是您唯一的路线吗?请发布您的整个路线配置。是,除了我创建项目时的默认路线配置之外,这是唯一的一个。如果要重定向,我如何在位置后添加日期?例如,旧金山加州大学?日期=2015年12月2日您需要将其作为附加参数传递:
redirectoaction(“Results”,new{location=location,date=*DATEVALUE*})
然后更新
结果
操作的签名以接受日期。实际上,这会引发异常。您不能有具有相同签名的GET和POST方法。@StephenMuecke有趣的是,我在一个示例项目中快速尝试了这个方法,没有任何问题,但可能遗漏了一些内容。您指的是哪个签名?@rmorrin,您的have
public ActionResult Search(string location)
[HttpPost]public ActionResult Search(string location)
将生成以下错误:
类型“HomeController”已使用相同的参数类型定义了名为“Results”的成员(它不会编译)
routes.MapRoute(
    name: "SearchResults",
    url: "Home/Results/{location}",
    defaults: new { controller = "Home", action = "Results" }
);