2014-10-08 185 views
1

我有一个在MVC区域内创建的视图。 从这个视图我想添加一个Html表单,获取到一个不在任何区域,但在我的主控制器文件夹中的控制器上的操作。ASP MVC - 从无区域控制器的区域内的Html.BeginForm

@using (Html.BeginForm("MyAction", "MyController", FormMethod.Get)) 
{ 
    <input type="submit" value="TEST" /> 
} 

当我执行这个代码,它试图找到我的控制器在同一地区和失败,下面的HTML生成

<form action="/MyApp/en/MyController/MyMethod" method="get"> 

这实际上适用于其他电话:

http://localhost:18183/MyApp/nl/OtherController/OtherAction 

我在没有区域的控制器上的动作可以在浏览器中这样得到:

http://localhost:18183/MyController/MyMethod 

但是,当我添加表单的经典方式,它仍然不能正常工作:

<form action="/MyController/MyMethod" method="get"> 

如何能够做到调用这个控制器?

+0

您应该从Global.asax文件开始您的调查。检查函数RegiterRoutes(...)和在应用程序启动之前设置的路由表。 – ramb0tn1k 2014-10-08 09:30:51

回答

8

您需要指定一个annonymous对象到routeValues属性:

@using (Html.BeginForm("MyAction", "MyController", new { area = "" }, FormMethod.Get)) 
{ 
} 

如果你想要去到不同的区域,而不是任何一个领域,修改空引号作为新的区域

此过载文件可在http://msdn.microsoft.com/en-us/library/dd492933(v=vs.118).aspx

+1

另外 - 这个机制适用于所有的HTML Helper,包括Html.ActionLink等,除非特别说明,否则它们不会将您移动到现有区域之外。只要确保传递给它的对象参数是routeValues而不是htmlAttributes – dannykay1710 2014-10-08 09:55:25