Asp.net-Mvc-3

為什麼 Html.BeginForm 生成空動作?

  • February 17, 2017

我在一個叫做的區域有一個控制器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 }
       );

我相信您的問題是由連續的可選參數引起的。在我更改路由以包含兩個可選參數之前,我無法複製您的問題。

請參閱:這篇解釋問題的文章

對於那些使用 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。

引用自:https://stackoverflow.com/questions/6365823