我是asp.net mvc4的新手,现在尝试一些练习。在对路由进行一些研究后,我仍然遇到在表单提交后传递参数的问题。
我的表单如下:
@using (Html.BeginForm("Index", "Resplaner", FormMethod.Get, new { name = "navigation", id = "navigation" }))
{
<select name="id" size="15" id="nav_menu">
@foreach (var categorie in Model.Categories)
{
<optgroup label="@categorie.Name">
@foreach (var ressource in Model.Ressources)
{
if (@categorie.Id == ressource.Type)
{
<option value="@ressource.Id">@ressource.Name</option>
}
}
</optgroup>
}
</select>
}
由以下java脚本提交:
$('#nav_menu').on('click', function (event) {
if ($(event.target).is("option")) {
var form = $(event.target).parents('form');
form.submit();
}
});
我的实际路线配置如下:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Resplaner",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Resplaner", action = "Index", id = UrlParameter.Optional }
);
所以我的问题是,我在表单提交后生成的url看起来像这样
http://localhost:62456/Resplaner?id=6
但我想要的网址看起来应该是这样的
http://localhost:62456/Resplaner/Index/6
如果我手动输入第二个网址到我的浏览器,会显示正确的结果...这就是为什么我猜我提交表单的方式有问题。或者我的路线还在弄乱。
我已经在mvc4中做了一些关于表单的示例教程,但是它们总是用在像我这样的不同情况下。所以我会很乐意伸出援助之手。
我感谢每一个帮助:)
问候Kurn
答案 0 :(得分:0)
这是我的解决方案 -
让你的html像这样 -
@using (Html.BeginForm("Index", "Resplaner", new { name = "rami", id = "1" }, FormMethod.Get))
{
// ....
}
然后有这样的路线 -
routes.MapRoute(
name: "MyRoute",
url: "{controller}/{action}/{name}/{id}",
defaults: new { controller = "Resplaner", action = "Index" }
);
然后你的jquery点击表单提交,你的URL将是 -
网址将是 - http://localhost:5738/Resplaner/Index/rami/1?
注意:如果您不想在结尾处使用该问号,请进行POST而不是GET。
另一种解决方案是使用隐藏字段 -
@using (Html.BeginForm("Index", "Resplaner", FormMethod.Get))
{
@Html.Hidden("id", "1");
@Html.Hidden("name", "rami");
<input type="submit" value="click"/>
}
但是这种方法再次给你 - http://localhost:5738/Resplaner/Index?id=1&name=rami
另一个备选方案是使用所需的URL创建@Html.ActionLink()
并使其在jquery中单击。
答案 1 :(得分:0)
好的,以另一种方式修复它。
为了解决我的实际问题,我刚在我的控制器中添加了一个新动作,它接收带有问号的表单参数,然后只需重定向到所需的URL。
[HttpGet]
public ActionResult IndexMap(String id = "1")
{
return RedirectToAction("Index", "Resplaner", new { id = id });
}
由于第二次服务器调用,这可能不是最好的方法。但对于我的项目,我没有看到任何性能问题,因为它只会在内联网中使用。
http://localhost:62456/Resplaner/IndexMap?id=2
会重定向到http://localhost:62456/Resplaner/Index/2
我要感谢所有试图帮助我的人。你给了我一些很棒的建议和想法。