我没有使用GET方法获得友好的URL

Fab*_*cio 6 asp.net-mvc asp.net-mvc-4

我设置了这样的路线:

routes.MapRoute(
    name: "Pesquisar",
    url: "Pesquisar/{aaa}/{bbb}/{id}",
    defaults: new { controller = "Home", action = "Pesquisar",
                    aaa = UrlParameter.Optional,
                    bbb = UrlParameter.Optional,
                    id = UrlParameter.Optional
    }
);
Run Code Online (Sandbox Code Playgroud)

当我按一个表单中的发送按钮(使用GET方法)时,网址就像这样:

http://localhost:00000/Pesquisar?aaa=One&bbb=Two
Run Code Online (Sandbox Code Playgroud)

但我期待:

http://localhost:00000/Pesquisar/One/Two
Run Code Online (Sandbox Code Playgroud)

jzm*_*jzm 0

不确定您是否直接从 html 表单获得干净的 URL GET

一个建议是对其POST执行一项操作,对数据执行您需要执行的操作,然后在完成后重定向到您的干净 URL。

例如

视图模型

public sealed class PesquisarModel
{
    public string aaa { get; set; }
    public string bbb { get; set; }
    public string id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器动作

[HttpGet]
public ActionResult Pesquisar(PesquisarModel m)
{
    return View();
}

[HttpPost]
[ActionName("Pesquisar")]
public ActionResult PesquisarPost(PesquisarModel m)
{
    //do stuff
    return RedirectPermanent("/pesquisar/" + m.aaa + "/" + m.bbb + "/" + m.id);
}
Run Code Online (Sandbox Code Playgroud)

看法

@model MyApplication.Models.PesquisarModel

@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.aaa)
    @Html.TextBoxFor(m => m.bbb)
    @Html.TextBoxFor(m => m.id)
    <button type="submit">Submit</button>
}
Run Code Online (Sandbox Code Playgroud)