我在一个名为Admin
public class SiteVisitController : Controller
{
public ViewResult ReadyForCompletion() { ... }
public ViewResult CompleteAndExport() { ... }
}
和一个视图(ReadyForCompletion.cshtml
),它回发到同一个类上的不同控制器操作
@using (Html.BeginForm( "CompleteAndExport", "SiteVisit" ))
{
<input type="submit" value="Complete & Export" />
}
此表单生成的HTML有一个空白操作:
<form action="" method="post"> <input type="submit" value="Complete & Export" />
</form>
我想知道为什么会有空白动作?有关详细信息,我还添加了
@Url.RouteUrl(new { controller = "ReadyForCompletion", action = "SiteVisit", area = "Admin" })
也打印出一个空字符串。另外,如果我使用空Html.BeginForm()
,它会生成正确的操作。
注册路线
context.MapRoute(
"Admin_manyParams",
"Admin/{controller}/{action}/{id}/{actionId}",
new { action = "Index", id = UrlParameter.Optional, actionId = UrlParameter.Optional }
);
答案 0 :(得分:10)
我相信您的问题是由连续的可选参数引起的。在更改路径以包含两个可选参数之前,我无法复制您的问题。
答案 1 :(得分:0)
对于那些使用ASP.NET Core遇到此问题的人来说,根本原因是相同的,尽管解决方案略有不同。我第一次在Core中看到这个,在调用.MapRoutes()
时使用了多个默认值。 E.g。
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Foo", action = "Bar" }
);
解决方法是将默认值放入字符串模板中:
routes.MapRoute(
name: "default",
template: "{controller=Foo}/{action=Bar}/{id?}"
);
因人而异。