超文本标记语言Beginform强制添加控制器名称



在MVC4中,使用

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

结果形式有

action="//"

因为它显然试图将控制器和操作压缩到url中。然而,我使用HomeController作为默认控制器,所以我不希望/Home/action出现在url中。这在大多数地方都工作得很好,但是这个表单似乎把我绊倒了

任何想法?

这不是控制器的名称。你可以这样做:

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"})

我认为这是一个黑客,但是,我建议你解决实际的路由问题。

最新更新