Html.Beginform强制添加控制器名称

时间:2013-03-24 06:39:22

标签: asp.net .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

在MVC4中,使用

Html.BeginForm("/", null, FormMethod.Post, new{something="demo"})

结果表格有

action="//"

因为它显然是试图将控制器和动作挤入网址。但是,我使用HomeController作为默认控制器,所以我不想在URL中使用/ Home / action。这在大多数地方都运作良好,但这种形式似乎让我感到沮丧

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

那不是控制器名称。你会做这样的事情:

Html.BeginForm("Index", "Home", FormMethod.Post, new {something="demo"})

如果您的路线设置正确且Home / Index是您的默认根路线,那么在渲染时,它将呈现为“/”。 MVC将自动优化路线以显示默认最小值(这是唯一的“/”)

如果您没有看到“/”,那么请查看您的路线,因为它无法正确反转生成URL(可能有多条路线匹配)。

如果您正在使用Home / SomethingElse并且它不是默认路由,那么我不太了解您要做的事情,因为您需要指定要发布到它的Controller / Action。

虽然我不推荐它,但您也应该能够这样做:

Html.BeginForm(null, null, FormMethod.Post, new {action="/", something="demo"})

然而,我会认为这是一个黑客,我会鼓励你解决实际的路线问题。