10

我在一个叫做的区域有一个控制器Admin

public class SiteVisitController : Controller
{
    public ViewResult ReadyForCompletion() { ... }

    public ViewResult CompleteAndExport() { ... }
}

和一个视图 ( ReadyForCompletion.cshtml) 回发到同一类上的不同控制器操作

@using (Html.BeginForm( "CompleteAndExport", "SiteVisit" ))
{        
    <input type="submit" value="Complete &amp; Export" />
}

为这个表单生成的 HTML 有一个空白动作:

<form action="" method="post">  <input type="submit" value="Complete &amp; 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 }
        );
4

2 回答 2

11

我相信您的问题是由连续的可选参数引起的。在我更改路由以包含两个可选参数之前,我无法复制您的问题。

请参阅:这篇解释问题的文章

于 2011-06-16T00:52:35.050 回答
0

对于那些使用 ASP.NET Core 遇到此问题的人来说,根本原因是相同的,尽管解决方案略有不同。我第一次在 Core 中看到这一点,调用时使用了多个默认值.MapRoutes()。例如

routes.MapRoute(
    name: "default",
    template: "{controller}/{action}/{id?}",
    defaults: new { controller = "Foo", action = "Bar" }
);

解决方法是将默认值放入字符串模板中:

routes.MapRoute(
    name: "default",
    template: "{controller=Foo}/{action=Bar}/{id?}"
);

YMMV。

于 2017-02-17T06:39:41.107 回答