mvc Html.BeginForm不同的URL架构

时间:2016-06-12 14:36:00

标签: c# asp.net-mvc forms routing asp.net-mvc-routing

我正在为DropDown创建一个表单,如下所示:

@{
    Html.BeginForm("View", "Stations", FormMethod.Get);
}
@Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"), new { onchange = "this.form.submit();" })
@{
    Html.EndForm();
}

如果我从下拉列表中选择一个值,我会被重定向到正确的控制器,但URL并不像我想要的那样:

  

/站/视图?ID = f2cecc62-7c8c-498d-b6b6-60d48a862c1c

我想要的是:

  

/站/视图/ f2cecc62-7c8c-498d-b6b6-60d48a862c1c

那么如何将id = querystring参数替换为我想要的更简单的URL方案呢?

2 个答案:

答案 0 :(得分:2)

带有FormMethod.Get的表单将始终将其表单控件的值作为查询字符串值进行回发。浏览器无法根据您的路由配置生成URL,因为它们是服务器端代码。

如果您真的想要生成/Stations/View/f2cecc62-7c8c-498d-b6b6-60d48a862c1c,那么您可以使用javascript / jquery来构建自己的网址并重定向

@using (Html.BeginForm("View", "Stations", FormMethod.Get))
{
    @Html.DropDownList("id", new SelectList(ViewBag.Stations, "Id", "Name"))
}

var baseUrl = '@Url.Action("View", "Stations")';
$('#id').change(function() {
    location.href = baseUrl + '/' $(this).val();
});

附注:提交.change()事件不是预期的行为,并且会让用户感到困惑。建议您添加一个按钮,让用户进行选择,检查并提交表单(处理按钮&#39; .click()事件,而不是下拉列表的.change()事件)< / p>

答案 1 :(得分:0)

删除&#34; hadoop-source-code/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/impl/pb/client/ApplicationMasterProtocolPBClientImpl.java#allocate&#34; 从

id