【问题标题】:Html.Beginform forcing addition of controller nameHtml.Beginform 强制添加控制器名称
【发布时间】:2013-03-24 06:39:21
【问题描述】:

在 MVC4 中,使用

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

生成的表单有

action="//"

因为它显然是试图将控制器和操作挤入 url。但是,我使用 HomeController 作为默认控制器,所以我不希望 /Home/action 在 url 中。这在大多数地方都运行良好,但这种形式似乎让我绊倒了

有什么想法吗?

【问题讨论】:

  • 你必须使用@Html 标记吗?你可以写纯html
    在这里mvc controls
  • 表单有客户端验证,所以尽量保持@html 路由。另外,我只需要弄清楚如何做到这一点

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


【解决方案1】:

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

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

不过,我认为这是一种 hack,我会鼓励您解决实际的路线问题。

【讨论】:

  • 按照您的“不推荐”方法手动添加操作是唯一对我有用的方法。
  • 在控制器名称中使用 null 甚至“”,并使用“/”作为操作名称,导致路径为“/”。尽管“home”是我的默认路由,但我认为“/”和“/Home”都会解析,因此将“Home”放在控制器名称中会导致不想要的完全限定版本。
  • @boomhauer - 你需要更清楚你想要什么。你的问题似乎想要一条“/”的路径。请澄清。
  • 我认为我的评论不正确。我的意思是它导致了“//”的路径,而不是我想要的“/”。
  • @boomhauer - 我再说一遍。如果您的路线设置正确,并且 Home/Index 是您的默认路线,那么指定 BeginForm("Index", "Home") 会将操作呈现为单个“/”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2012-07-05
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多